Jump to content
Anderson Campos da Silva

[Resolvido] Select com group by

Recommended Posts

Olá,

 

Estou com um problema, que para alguns pode ser simples, é o seguinte:

 

Tenho 2 tabela relacionadas, MODELO e EQUIPAMENTO

 

TABELA MODELO

idModelo (INT) - chave primária  

txModelo (VARCHAR)

 

TABELA EQUIPAMENTO 

idEquipamento (INT) - chave primária   

patrimonio (VARCHAR)

situacao (VARCHAR)

idModelo (INT) - Chave estrangeira

 

O campo situação pode ser preenchido apenas apenas com PRODUÇÃO OU ESTOQUE.

 

Enfim, preciso de um SELECT que retorne as seguintes colunas txModelo, quantidade de equipamentos por modelo, quantidade de equipamentos com PRODUÇÃO, e quantidade de equipamentos com ESTOQUE, exemplo:

 

txModelo | total | produção | estoque

CISCO           7            4                  3

HP                15          10                 5

DELL            10           2                   8

 

Desde já agradeço

Share this post


Link to post
Share on other sites
2 horas atrás, Motta disse:

Veja se isto ajuda , talvez se precise de um join.

Opa, obrigado pela ajuda, porém, as linhas ficaram duplicadas:

 

QUERY:

 

SELECT txModelo, count(equipamento.idModelo) AS TOTAL,

CASE WHEN situacao='EM ESTOQUE' then count(situacao) else 0 end AS 'ESTOQUE', 
CASE WHEN situacao='EM PRODUÇÃO' then count(situacao) else 0 end AS 'PRODUÇÃO' 

FROM modelo LEFT JOIN equipamento ON modelo.idModelo = equipamento.idModelo 

GROUP BY descModelo, situacao

 

Retornou assim:

 

txModelo | total | produção | estoque

CISCO           4            4                  0

CISCO           3            0                  3

HP                10          10                 0

HP                 5            0                  5

DELL             2            2                   0

DELL             8            0                   8

Share this post


Link to post
Share on other sites
SELECT txModelo, count(equipamento.idModelo) AS TOTAL,
CASE WHEN situacao='EM ESTOQUE' then count(situacao) else 0 end AS 'ESTOQUE', 
CASE WHEN situacao='EM PRODUÇÃO' then count(situacao) else 0 end AS 'PRODUÇÃO' 
FROM modelo LEFT JOIN equipamento ON modelo.idModelo = equipamento.idModelo 
GROUP BY txModelo

 

Share this post


Link to post
Share on other sites
8 minutos atrás, Motta disse:

SELECT txModelo, count(equipamento.idModelo) AS TOTAL,
CASE WHEN situacao='EM ESTOQUE' then count(situacao) else 0 end AS 'ESTOQUE', 
CASE WHEN situacao='EM PRODUÇÃO' then count(situacao) else 0 end AS 'PRODUÇÃO' 
FROM modelo LEFT JOIN equipamento ON modelo.idModelo = equipamento.idModelo 
GROUP BY txModelo

 

Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'asr.equipamento.situacao' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

 

Só funciona se eu adicionar situação na cláusula GROUP BY
 

Share this post


Link to post
Share on other sites

Com CASE dava erro se não colocasse situacao na cláusula group by , mas com IF funcionou

 

SELECT txModelo, count(equipamento.idModelo) AS TOTAL,

COUNT(IF( situacao='EM ESTOQUE', situacao, null)) AS ESTOQUE,
COUNT(IF( situacao='EM PRODUÇÃO', situacao, null)) AS PRODUCAO

FROM modelo LEFT JOIN equipamento ON modelo.idModelo = equipamento.idModelo 

GROUP BY txModelo

 

Obrigado!!!
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By reytlersouza
      Não consigo passar variável obtida por consulta no banco no value de uma TAG <option> "<option value="<?php $item['id_eq']?>">"
       
      O que está errado no meu código que ele não passa o valor de value no $_GET nem no $_POST?

       
      <?php
          echo $_GET['equi1'];
      ?>
      <form method="GET">   
          <select name="equi1" class="form-control">
              <?php
              require 'conn.php';
              $sql = $pdo->prepare("SELECT * FROM equipamento WHERE 1");
              $sql->execute();
              if($sql->rowCount() > 0) {
              foreach($sql->fetchAll() as $item) {
                                                                      
              ?>
              <option value="<?php $item['id_eq'];?>"><?php echo $item['nome'];?></option>
              <?php
                  }
                  }
                  ?>
          </select>
          <input type="submit" value="Salvar"/>
      </form>
    • By brunoogm
      Pessoal tenho uma tabela no php cujo resultado do select vindo do bd vem no seguinte formato:
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Bacon Cheddar                          1          60.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Chicken Club Sandwich            1          45.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Philly Cheese Steak                   1          50.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Smoke House                             1          55.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Stream Miller                              1          35.00
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      E eu gostaria de fazer um select para que nao repita os dados iguais e que a tabela viesse assim:
       
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                                                                      Bacon Cheddar                          1           60.00
                                                                                                                                                      Chicken Club Sandwich           1            45.00
      26    46        15/05/2019 13:57:25         Dinheiro                  Pendente                           Philly Cheese Steak                   1            50.00
                                                                                                                                                      Smoke House                             1            55.00
                                                                                                                                                      Stream Miller                              1            35.00
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      Alguem pode me ajudar, qual seria a melhor forma de fazer ?

      Essa tabela é gerada com um while no php entao se alguem saber uma outra maneira de montar isso aceito dicas.
       
      php: 
      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      echo "<tr role='row' class='odd'>";
                                                      echo "<td class='sorting_1'>" .$resultado['CodigoComanda']. "</td>";
                                                      echo "<td>" .$resultado['Nome']."</td>";
                                                      echo "<td>" .$resultado['Quantidade']."</td>";
                                                      echo "<td>" .$resultado['Preco']."</td>";
                                                      echo "<td>" .$resultado['Metodos']."</td>";
                                                      echo "<td>" .$resultado['DataPedido']."</td>";
                                                      echo "<td>" .$resultado['Situacao']."</td>";
      echo "</tr>";
      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      vlw pessoal
       
    • By brunoogm
      Pessoal tenho uma tabela no php cujo resultado do select vindo do bd vem no seguinte formato:
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Bacon Cheddar                          160.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Chicken Club Sandwich            145.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Philly Cheese Steak                   150.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Smoke House                             155.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Stream Miller                              135.00
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
      E eu gostaria de fazer um select para que nao repita os dados iguais e que a tabela viesse assim:
       
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                 46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Bacon Cheddar                          160.00
                                                                                                                                                      Chicken Club Sandwich            145.00
                                                                                                                                                      Philly Cheese Steak                   150.00
       Smoke House                             155.00
      26       46        15/05/2019 13:57:25         Dinheiro                  Pendente                        Stream Miller                              135.00
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.