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

Como filtrar registros com função agregada AVG

Problema:


Você deseja encontrar grupos de linhas em que a média dos valores em uma coluna seja maior ou menor que um determinado valor.

Exemplo:


Nosso banco de dados tem uma tabela chamada product com dados nas seguintes colunas:id , name , grocery e price .
id nome mercearia preço
1 leite Loja Verde 2,34
2 pão Mercearia do Clark 3,56
3 pão Supermercado 4.15
4 leite Supermercado 1,80
5 pão Mantimento Amanda 2,26
6 leite Mercearia Violeta 3,45
7 leite Mercearia do Clark 2.10
8 pão Mercearia Violeta 2,55
9 leite Mantimento Amanda 1,95

Vamos encontrar os nomes dos produtos em que o preço médio de cada produto entre os mantimentos é superior a 3,00.

Solução:

SELECT name, AVG(price)
FROM product
GROUP BY name
HAVING AVG(price)>3.00;

Aqui está o resultado:
nome média
pão 3.13

Discussão:


Para filtrar registros usando a função de agregação, use a cláusula HAVING.

Aqui calculamos o valor agregado:o preço médio de cada produto. Um é vendido por mais de um merceeiro; portanto, o preço médio é calculado para cada um (no nosso exemplo, SELECT name, AVG(price) ). Além da função de agregação, também usamos o nome da coluna em SELECT, então devemos usar GROUP BY com este nome de coluna (GROUP BY name ).

A última etapa é usar a função agregada na cláusula HAVING. Lembre-se que HAVING deve ser colocado após a cláusula GROUP BY. Ele contém a condição que compara o valor retornado pela função agregada com um determinado valor. Acima, é o preço médio do produto com valor 3,00 (HAVING AVG(price)>3.00 ). Nesta consulta, verificamos se o preço médio de cada produto em todas as compras é superior a três. A consulta apresentou apenas um produto, pão, com preço médio superior a três.