Database
 sql >> Base de Dados >  >> RDS >> Database

Como filtrar registros com função agregada SUM

Problema:


Você precisa encontrar linhas em que os grupos tenham uma soma de valores em uma coluna menor que um determinado valor.

Exemplo:


Nosso banco de dados tem uma tabela chamada company com dados nas seguintes colunas:id , department , first_name , last_name e salary .
id departamento first_name last_name salário
1 marketing Lora Marrom 2300
2 finanças João Jackson 3200
3 marketing Michael Thomson 1270
4 produção Tony Moleiro 6500
5 produção Sally Verde 2500
6 finanças Olivier Preto 3450
7 produção Jennifer Michelin 2800
8 marketing Jeremy Lorson 3600
9 marketing Luís Smith 4200

Vamos encontrar os nomes dos departamentos que têm somas de salários de seus funcionários inferiores a 7.000.

Solução:

SELECT department, SUM(salary)
FROM company
GROUP BY department
HAVING SUM(salary)<7000;

Aqui está o resultado:
departamento soma
finanças 6550

Discussão:


Para filtrar registros usando a função agregada (a função SUM anterior), use a cláusula HAVING. Para calcular a soma dos valores para cada grupo de linhas, use a função de agregação SUM. Nesta consulta, a coluna departamento é calculada com a soma de todos os salários de seus funcionários como um grupo (calcule-o com a função SOMA com a coluna salário como argumento). Como você calcula o valor para cada grupo de linhas (agrupamos as linhas de acordo com o nome do departamento), a consulta possui uma cláusula GROUP BY com o nome da coluna para agrupar as linhas (no nosso exemplo, GROUP BY department ). A última etapa é usar a função agregada na cláusula HAVING. Lembre-se, HAVING deve ser colocado após a cláusula GROUP BY. HAVING contém a condição que compara o valor retornado pela função agregada com um determinado valor. De cima, são as somas salariais com valor inferior a 7000 (SUM(salary)<7000 ). Aqui, verificamos que a soma salarial em cada departamento é inferior a 7.000. A consulta exibiu apenas um departamento, financeiro, com salários de 6.550.