Jump to content
Fivewin Brasil

select com group by


edutraini

Recommended Posts

Bom dia, Pessoal 

Estou com uma dificuldade em um select usando o group 

tenho uma tabela de produtos conforme exemplo abaixo

select lote,tipo,secao,bitola,acab,sum(estqatual) as estqatual,codipi,tributo,tratamento,local,compriment,comprimenf,local,bitola1,bitola2,cod_item_k FROM dpropro0
where
tipo = '52100' and COALESCE(dpropro0.SR_DELETED,' ') <> 'T' 
GROUP BY 
lote,tipo,secao,bitola,acab,estqatual,codipi,tributo,tratamento,local,compriment,comprimenf,local,bitola1,bitola2,cod_item_k 
ORDER BY
tipo,secao,bitola

Lote                   | seq | tipo de aco | secao     | estqatual |  e outros campos

001-001-01-01 | 001 | 52100          | redondo | 100.00 |

001-001-01-01 | 002 | 52100          | redondo | 200.00 |

001-001-01-01 | 003 | 52100         | redondo  | 150,00 |

Gostaria de jogar no browse somente a soma do estoque de cada lote

lote                    | tipo de aco |   secao   |estqatual

001-001-01-01 | 52100         | redondo | 450,00

mas o resultado ainda vem como 

001-001-01-01 | 001 | 52100          | redondo | 100.00 |

001-001-01-01 | 002 | 52100          | redondo | 200.00 |

001-001-01-01 | 003 | 52100         | redondo  | 150,00 |

talvez por causa de varios campos no group 

Ai vem a pergunta estou usando o comando errado ou exite alguma outra forma

Agradeço muito

Edu

 

 

Link to comment
Share on other sites

 

Olá, boa tarde!

 

SELECT lote, seq, tipo, secao, SUM(estoqatual)  FROM teste WHERE tipo = "51200" GROUP BY tipo;

Assim, acho que resolve sua consulta.

simulei aqui uma tabela

Lote   Seq    Tipo        Secao       EstoqAtual    ID

001    001    51200    redondo    100                  1
001    002    51200    redondo    200                 2
001    003    51200    redondo    150                 3
 

Aplicando a query acima o resultado é

Lote   Seq    Tipo        Secao       EstoqAtual   

001    001    51200    redondo    450

Att.,

Oliveiros Junior

 

 

Link to comment
Share on other sites

Oliveiros eu não testei mas acho que é necessário colocar as outras colunas no group.

Edu, se der erro a solução passada acima tente a seguinte:

SELECT lote, seq, tipo, secao, SUM(estoqatual) as total  FROM teste WHERE tipo = "51200" GROUP BY lote, seq, tipo, secao

 

e se quiser ordenar trabalhe com order by

SELECT lote, seq, tipo, secao, SUM(estoqatual) as total  FROM teste WHERE tipo = "51200" GROUP BY lote, seq, tipo, secao ORDER BY LOTE, SEQ, TIPO, SECAO

Link to comment
Share on other sites

Boa tarde,

Se quiser agrupar por "LOTE", então o "group by Lote"

select lote,tipo,secao,bitola,acab,sum(estqatual) as estqatual,codipi,tributo,tratamento,local,compriment,comprimenf,local,bitola1,bitola2,cod_item_k FROM dpropro0
where tipo = '52100' and COALESCE(dpropro0.SR_DELETED,' ') <> 'T' GROUP BY lote ORDER BY tipo asc, secao asc, bitola asc;

Link to comment
Share on other sites

Boa tarde Pessoal

Obrigado pela ajuda

para usar o group vc precisa colocar todos os campos que estao na select senao ele nao funciona

Eu descobri se algum campo que esta na select tiver diferente dentro do grupo ele quebra exemplo

campo observacao esta diferente ai ele nao consegue juntar 

SELECT lote,, tipo, secao, SUM(estoqatual) as total, observacao  FROM dpropro0 WHERE tipo = "51200" GROUP BY lote, tipo, secao, observacao  ORDER BY LOTE, SEQ, TIPO, SECAO

Lote                   | seq | tipo de aco | secao     | estqatual | observacao

001-001-01-01 | 001 | 52100          | redondo | 100.00 | AMARELO

001-001-01-01 | 002 | 52100          | redondo | 200.00 | VERDE 

001-001-01-01 | 003 | 52100         | redondo  | 150,00 | AZUL 

se eu tirar o campo observacao da select ai funciona 

nao sei se tem algum parametro dentro group que consiga colocar as chaves exemplo somente lote,tipo,secao 

 

Link to comment
Share on other sites

Oi Edu, bom dia!

 

O comando GROUP BY agrupa pela ordem que você definir. Primeiro veja que você colocou no comando WHERE que só o tipo "52100" interessa. Assim os três registros do seu exemplo são filtrados, logo em seguida pelo comando GROUP BY você diz que registros filtrados devem ser agrupados por lote, Seq, Tipo, Secao. Veja os lotes são iguais, porém os conteúdos dos campos seq são diferentes, se você parar no GROUP BY lote, seq ele vai te dar 3 resultados diferentes, apesar de tipo e secao serem iguais. Se você agrupar por lote, tipo, secao, terá 1 resultado.

Faça o seguinte teste:

SELECT lote, tipo, secao, SUM(estoqatual) as total, observacao  FROM dpropro0 WHERE tipo = "51200" GROUP BY lote, tipo, secao

o seu resultado será uma só linha, porém se você colocar a seq são três. O agrupamento é por "igualdade de conteúdos".

Att.,

Oliveiros Junior

Se quiser mandar a query que está fazendo e o resultado esperado, podemos ajudar.

 

 

Link to comment
Share on other sites

Bom dia Junior

EU entendi oque vc me passou mas ai minha duvida é que se eu nao colocar o campo observacao no group by ele da essa mensagem no manager studio

Mensagem 8120, Nível 16, Estado 1, Linha 1
A coluna 'dpropro0.OBSERVACAO ' é inválida na lista de seleção porque não está contida em uma função de agregação nem na cláusula GROUP BY.


 

Link to comment
Share on other sites

exatamente Edu, foi por isso que eu coloquei o select com o group by com todos as colunas do select

3 horas atrás, edutraini disse:

Bom dia Junior

EU entendi oque vc me passou mas ai minha duvida é que se eu nao colocar o campo observacao no group by ele da essa mensagem no manager studio

Mensagem 8120, Nível 16, Estado 1, Linha 1
A coluna 'dpropro0.OBSERVACAO ' é inválida na lista de seleção porque não está contida em uma função de agregação nem na cláusula GROUP BY.


 

 

Link to comment
Share on other sites

Oliveiros, em qual banco você está testando isso? Em SQL SERVER da erro um select como esse. Todas as colunas do select precisam estar no group senão da erro. No caso do seu exemplo se eu rodar em sql server eu tenho duas opções: ou retiro a observação do select ou coloca ela no group by junto as demais.

 

8 minutos atrás, oliveiros disse:

Só uma observação, como o conteúdo da obervação é diferente, como na seq, ele mostra a primeira ocorrência. Se o seq estiver na lista de campos a ser apresentado, ele apresentaria a seq 001.

 

 

Link to comment
Share on other sites

Em 06/07/2022 at 17:18, edutraini disse:

Boa tarde Pessoal

Obrigado pela ajuda

para usar o group vc precisa colocar todos os campos que estao na select senao ele nao funciona

Eu descobri se algum campo que esta na select tiver diferente dentro do grupo ele quebra exemplo

campo observacao esta diferente ai ele nao consegue juntar 

SELECT lote,, tipo, secao, SUM(estoqatual) as total, observacao  FROM dpropro0 WHERE tipo = "51200" GROUP BY lote, tipo, secao, observacao  ORDER BY LOTE, SEQ, TIPO, SECAO

Lote                   | seq | tipo de aco | secao     | estqatual | observacao

001-001-01-01 | 001 | 52100          | redondo | 100.00 | AMARELO

001-001-01-01 | 002 | 52100          | redondo | 200.00 | VERDE 

001-001-01-01 | 003 | 52100         | redondo  | 150,00 | AZUL 

se eu tirar o campo observacao da select ai funciona 

nao sei se tem algum parametro dentro group que consiga colocar as chaves exemplo somente lote,tipo,secao 

 

Boa noite,

Não entendo sua dúvida , como quer agrupar se tem colunas com valor diferente, só vai agrupar mesmo se todas colunas forem iguais, se vc tem várias observações qual vc deseja que mostre, acho lógico , se vc quiser mostrar todas observações, faz um sub-select  e criar um array das observações numa coluna, se quiser mostrar só uma observação faz um limit 1

Link to comment
Share on other sites

então é isso, mysql tem um comportamento diferente do sql server neste sentido.

Se vc executar essa query com os mesmos dados em sql server vai dar erro.

Em 07/07/2022 at 15:31, oliveiros disse:

Oi emotta, boa tarde!

Eu tenho um servidor linux na LocaWeb com mysql 8.0.

Att.,

Oliveiros Junior

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...