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.