Olá galera,
Hoje falarei sobre a consulta que precisei fazer em um projeto. A idéia é capturar somente os valores máximos das somas dessa consulta. Por se tratar de um "SQL" não muito básico, resolvi compartilhar minha solução utilizando SUM e MAX.
Para exemplificar a situação, vamos adotar uma tabela chamada loja com os valores hipotéticos abaixo:
categoria | produto | quantidade |
---|---|---|
Informática | Notebook | 15 |
Informática | Notebook | 20 |
Informática | Mouse | 45 |
Informática | Mouse | 30 |
Informática | Monitor | 25 |
Informática | Monitor | 5 |
Eletrônicos | DVD Player | 2 |
Eletrônicos | DVD Player | 15 |
Eletrônicos | DVD Player | 34 |
Eletrônicos | Fone de ouvido | 1 |
Eletrônicos | Fone de ouvido | 22 |
Eletrônicos | Fone de ouvido | 62 |
Eletrônicos | Calculadora | 6 |
Eletrônicos | Calculadora | 14 |
Eletrônicos | Calculadora | 9 |
Automotivos | GPS | 3 |
Automotivos | GPS | 7 |
Automotivos | GPS | 8 |
Automotivos | Rodas | 60 |
Automotivos | Rodas | 9 |
Automotivos | Alarme | 19 |
Automotivos | Alarme | 23 |
Executando a consulta somente com SUM.
SELECT categoria, produto, SUM(quantidade) AS quantidade FROM loja GROUP BY categoria, produto
Obteremos o resultado.
categoria | produto | quantidade |
---|---|---|
Informática | Notebook | 35 |
Informática | Mouse | 75 |
Informática | Monitor | 30 |
Eletrônicos | DVD Player | 51 |
Eletrônicos | Fone de ouvido | 85 |
Eletrônicos | Calculadora | 29 |
Automotivos | GPS | 18 |
Automotivos | Rodas | 69 |
Automotivos | Alarme | 42 |
Até agora, não temos complexidade. Só que o resultado desejado é como a tabela abaixo.
categoria | produto | quantidade |
---|---|---|
Informática | Mouse | 75 |
Eletrônicos | Fone de ouvido | 85 |
Automotivos | Rodas | 69 |
A consulta seria simples se tivéssemos que exibir somente a coluna categoria e quantidade sem a coluna produto. Pensei em algumas possibilidades, que incluíam o uso do HAVING e WHERE, mas a obrigatoriedade do GROUP BY me fez pensar em outra alternativa. Segue abaixo minha solução.
SELECT a.categoria, a.produto, a.quantidade FROM ( SELECT i.categoria, i.produto, SUM(i.quantidade) AS quantidade FROM loja i GROUP BY i.categoria, i.produto ) AS a INNER JOIN ( SELECT t.categoria, MAX(t.quantidade) as quantidade FROM ( SELECT j.categoria, j.produto, SUM(j.quantidade) AS quantidade FROM loja j GROUP BY j.categoria, j.produto ) AS t GROUP BY t.categoria ) AS b ON a.categoria = b.categoria AND a.quantidade = b.quantidade;
Você realizou a consulta de uma forma diferente?! Envie seu comentário e compartilhe conosco.
Grande abraço a todos e até a próxima.