1
resposta

GroupBy com mais de uma coluna

Olá. Na aula o instrutor demonstra que é possível agrupar os bairros da tabela de clientes e pegar a soma do limite de crédito:

SELECT BAIRRO, SUM([LIMITE DE CREDITO]) FROM [SUCOS_VENDAS].[dbo].[TABELA DE CLIENTES]
WHERE ESTADO = 'SP' GROUP BY BAIRRO;

O resultado dessa consulta é:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Então o instrutor mostra que é possível mostrar mais de uma coluna nos resultados, como a coluna ESTADO:

SELECT BAIRRO, ESTADO, SUM([LIMITE DE CREDITO]) FROM [SUCOS_VENDAS].[dbo].[TABELA DE CLIENTES]
WHERE ESTADO = 'SP' GROUP BY BAIRRO, ESTADO ORDER BY BAIRRO DESC;

E o resultado disso é exatamente o mesmo da imagem acima, quando a consulta não continha a coluna ESTADO. Nenhum bairro se repete nos resultados, mesmo tendo mais uma coluna no group by e ainda eu consigo ver o estado nos resultados: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Então realizei uma query para ver a soma do limite de credito por bairros, mas sem limitar ao estado de SP. Novamente o resultado não possui nenhuma repetição de bairros e continuo podendo ver os estados:

SELECT BAIRRO, ESTADO, SUM([LIMITE DE CREDITO]) FROM [SUCOS_VENDAS].[dbo].[TABELA DE CLIENTES]
GROUP BY BAIRRO, ESTADO;

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Com isso pensei que eu poderia, por exemplo, pegar o valor máximo por embalagem na tabela de produtos e ao mesmo tempo ter o nome do produto que tem esse valor máximo. No caso:

SELECT [EMBALAGEM], [NOME DO PRODUTO], MAX([PREÇO DE LISTA]) FROM [SUCOS_VENDAS].[dbo].[TABELA DE PRODUTOS] 
GROUP BY [EMBALAGEM], [NOME DO PRODUTO];

Porém, essa query não funciona como eu esperava. Em vez de me mostrar o mesmo resultado do GROUP BY só por EMBALAGEM, mas com o nome do produto, ele me retorna todos os produtos da tabela, como se ignorasse o group by: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Com isso, acho que eu não entendi de verdade a natureza do GroupBy com mais de uma coluna. Neste último exemplo eu esperava ver o mesmo resultado de

SELECT [EMBALAGEM], MAX([PREÇO DE LISTA]) FROM [TABELA DE PRODUTOS] GROUP BY [EMBALAGEM];

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

mas com a adição da coluna de nome do produto. Igual a query dos bairros em que eu pude ver a qual Estado pertencia o bairro. Se alguém puder explicar, agradeço desde já.

1 resposta

Boa noite, Fernando!

Na verdade a query funcionou, se você reparar, a lista de produtos não repete nenhum item. Então a função GROUP BY fez seu papel.

Se o banco de dados possuir somente esses itens, não vai fazer diferença no fim. Porém se houver mais itens (REPETIDOS) na lista de produtos, então a query está funcionando.

Se o que você estava procurando era somente o maior valor por embalagem, sugiro usar a query:

SELECT [EMBALAGEM], SUM([PREÇO DE LISTA]) FROM [SUCOS_VENDAS].[dbo].[TABELA DE PRODUTOS] GROUP BY [EMBALAGEM]