Problema:
Você deseja encontrar grupos de linhas com um número específico de entradas em um grupo.
Exemplo:
Nosso banco de dados tem uma tabela chamada
product
com dados nas seguintes colunas:id
, name
e category
. id | nome | categoria |
---|---|---|
1 | sofá | móveis |
2 | luvas | roupas |
3 | camiseta | roupas |
4 | cadeira | móveis |
5 | mesa | móveis |
6 | assistir | eletrônicos |
7 | poltrona | móveis |
8 | saia | roupas |
9 | receptor de rádio | eletrônicos |
Vamos encontrar a categoria de produtos com mais de duas entradas.
Solução:
SELECT category, COUNT(id) FROM product GROUP BY category HAVING COUNT(id)>2;
Aqui estão os resultados:
categoria | contagem |
---|---|
móveis | 4 |
roupas | 3 |
Discussão:
Para filtrar registros de acordo com o número determinado de linhas no grupo, use a cláusula HAVING. Ele filtra linhas usando uma função de agregação de condição como COUNT. Primeiro, em SELECT, use o nome de uma coluna ou colunas para agrupar linhas (esta é uma categoria em nosso exemplo), depois coloque a função agregada COUNT, que contabiliza o número de registros em cada grupo. Para contar o número de linhas, use a coluna id que armazena valores únicos (no nosso exemplo usamos
COUNT(id)
). Em seguida, use a cláusula GROUP BY para agrupar registros de acordo com as colunas (o GROUP BY
categoria acima). Após usar GROUP BY para filtrar registros com funções agregadas como COUNT, use a cláusula HAVING. É sempre usado após a cláusula GROUP BY. Em HAVING, usamos uma condição para comparar um valor com um retornado pela função de agregação. No exemplo, comparamos se COUNT(id) retorna um valor maior que dois. Se true, a categoria é retornada com a contagem de produtos.