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 neto_celino
      Estou usando o seguinte código para somar um SELECT, mas cheguei em um determinado ponto que travei.
       
      Tenho 400 registros na DB e tenho que somar alguns registros somente. Ou seja, somar o (valortotal) de alguns ID's somente. 
      É possivel e por onde vou ? rs.
      <?php $subtotal = "SELECT SUM(valortotal) from tbl_compras WHERE id = VariosIdAqui"; $resultado = mysql_query($subtotal); $registro = mysql_fetch_row($resultado); echo number_format($registro[0], 2, ',', ' ') ;  ?>      
    • By Giovanird
      Olá amigos!
      Tenha a seguinte estrutura no banco MySQL
      COD   |   PONTOX  |  PONTOY  |  ATLETAX       |  ATLETAY
      1         |   0               |  1               |  Maria              |  João
      2         |   2               |  0               |  João               |  Maria
      3         |   0               |  2               |  Maria              |  João
      4         |   7               |  5               |  Maria              |  João
      5         |   0               |  3               |  João               |  Maria
      6         |   2               |  1               |  João               |  Maria
      7         |   0               |  6               |  Maria              |  João
      8         |   4               |  0               |  João               |  Maria
       
      Preciso de ajuda para somar quantos pontos fez o atleta João nos últimos 5 torneios (COD 8, 7, 6, 5 e 4)  Há momento que o João jogou em X e outro momento em Y.
      Abaixo segue meu Select, onde a soma dos pontos deve ser 17.
       
      nomeatleta = "João"
      Set soma= banco.execute("SELECT sum(PONTOX ) AS somax,  sum(PONTOY ) AS somay FROM (select cod, pontox, pontoy, atletax, atletay  from torneios where (atletax like '"&nomeatleta&"' or atletay like '"&nomeatleta&"') order by cod desc limit 5) AS temp")
       
    • By Marcones Borges
      Olá, bom dia, estou tendo dificuldade em uma filtragem, quando passo o parâmetro para o select em forma de variável ele não exibe resultados.
       
      Segue o código:

              $usuario='gerente';         function montaSelect()         {         $sql = "SELECT * FROM membros WHERE user='".$usuario."' ";                 $query = mysql_query( $sql );                 if( mysql_num_rows( $query ) > 0 )                 {                         while( $dados = mysql_fetch_assoc( $query ) )                         {                                 $opt .= '<option value="'.$dados['nome'].'">'.$dados['nome'].'</option>';                         }                 }                 else                         $opt = '<option value="0">Nenhum Membro cadastrado</option>';                 return $opt;         }


      Quando substituo a variável pelo nome usuário gerente, ele lista normal, mais na variável não da certo. já tentei user='{$usuario}'  , user='$usuario' , user=$usuario}, nenhuma forma funciona...

      Alguém pode me ajudar..
       
    • By peterstefan
      Olá, estou com uma query aqui e preciso pegar de 2 campos diferentes os dados diferente de 0,  mais quanto tento no AND ele somente traz um resultado, o OR ele traz um dos campos com o valor 0, teria alguma forma de pegar os dados diferente de 0 dos dois campus?
      preciso pegar o idOrganizador diferente de 0 e o idPiloto diferente de 0 
       
      SELECT * FROM boletos WHERE proc = 0 AND idOrganizador !='0' AND idPiloto ='0';  
    • By mamotinho
      oi pessoal estou com um problema , não estou conseguindo passar todos os valores o foreach no json_encode() alguém poderia me ajudar, eu estou tentando monta um mecanismo de refresh em tempo real de uma lista de notificação veja abaixo:
       
      <script type="text/javascript"> function make_call() { // Fazendo requisição AJAX $j.post('teste.php', function (frase) { // Exibindo frase $j('#listas').html('<i>' + frase + '</i>'); }, 'JSON'); setTimeout(function(){ make_call(); }, 5000); } </script>
      Aqui é o arquivo que quero enviar para a div #lists
       
      <?php require("conexao/directory.php"); $notificar = $db->query("select TOP 5 * from Techi7CP.dbo.cabal_notificacao_geral order by regdate desc"); $notificacao = $notificar->fetchAll(); $count_notificacao = abs($notificar->rowCount()); if($count_notificacao==0){ echo '<li style="text-align:center;">não existe notificações no momento.</li>'; }else{ foreach($notificacao as $notif){ $consulta_conta = $db->query("select * from account.dbo.cabal_auth_table where UserNum='".$notif['usernum']."'")->fetchObject(); switch($notif['acao']){ case 'logadopremiado' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle red small">redeem</span>'.$notif['jogador'].' ganhou no Logado Premiado</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'mudarsenha' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle teal small">vpn_key</span>'.$consulta_conta->Nome.' alterou sua senha</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'distribuirpontos' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle cyan small">control_point</span>'.$notif['jogador'].' distribuiu seus pontos</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'girodasorte' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle brown small">star_border</span>'.$consulta_conta->Nome.' usou o giro da sorte</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'sistematpoint' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle green small">golf_course</span>'.$notif['jogador'].' recebeu seu tpoint por clique</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; case 'combo' : echo ' <li><a class="black-text" href="#!"><span class="material-icons icon-bg-circle amber small">videogame_asset</span>'.$notif['jogador'].' fez '.$notif['ExtraDetalhes'].' em sua primeira vez</a> <time class="media-meta grey-text darken-2" datetime="2015-06-12T20:50:48+08:00"> '.Data::ExibirTempoDecorrido(date("Y-m-d H:i:s.B", strtotime($notif['regdate']))).'</time> </li>'; break; } } } ?> como eu faria para ser exibido todos os resultados registrados com o json_encode().
×

Important Information

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