|
Além de poder agrupar dados usando GROUP BY, o SQL também permite filtrar quais grupos incluir e quais excluir.
Por exemplo, você pode querer uma lista de todos os clientes que fizeram pelo menos dois PEDIDOS.
Para obter esses dados, você deve filtrar com base no grupo completo, não em linhas individuais.
HAVING é muito semelhante a WHERE.
A única diferença é que WHERE filtra linhas e HAVING filtra grupos.
WHERE filtra antes de os dados serem agrupados e HAVING filtros depois que os dados são agrupados.
Além disso, a cláusula HAVING foi adicionada ao SQL porque a palavra-chave WHERE não pode ser usada com funções de agregação.
Banco de dados DB2:
Abaixo está uma seleção da tabela "PEDIDOS" no banco de dados DB2.
| NROORDEM |
NROCLIENTE |
DATAPEDIDO |
| 1001 | 10 | 2020-09-08 |
| 1002 | 99 | 2020-09-01 |
| 1003 | 17 | 2020-08-25 |
| 1004 | 76 | 2020-07-19 |
| 1005 | 99 | 2020-09-21 |
| 1006 | 17 | 2020-08-25 |
| 1007 | 76 | 2020-05-19 |
| 1008 | 99 | 2020-03-01 |
| 1009 | 30 | 2020-06-25 |
| 1010 | 40 | 2020-09-19 |
| 1011 | 76 | 2020-05-19 |
| 1011 | 99 | 2020-05-19 |
Exemplo 1:
A seguinte instrução SQL seleciona a lista de todos os clientes que tenham feito pelo menos dois PEDIDOS.
SELECT NROCLIENTE, COUNT(*) AS PEDIDOS
FROM PEDIDOS
GROUP BY NROCLIENTE
HAVING COUNT(NROCLIENTE) >= 2;
|
Nesta instrução, a cláusula GROUP BY é utilizada para agrupar os dados por NROCLIENTE de forma que a função COUNT (*) possa retornar o número de PEDIDOS colocados
por cada cliente.
A cláusula HAVING filtra os dados para que apenas PEDIDOS com dois ou mais itens sejam retornados.
Resultado:
| NROCLIENTE |
PEDIDOS |
| 17 | 2 |
| 76 | 3 |
| 99 | 4 |
Exemplo 2: agrupamento e classificação
Para classificar a saída de GROUP BY, você precisa usar ORDER BY.
SELECT NROCLIENTE, COUNT(*) AS PEDIDOS
FROM PEDIDOS
GROUP BY NROCLIENTE
HAVING COUNT(NROCLIENTE) >= 2;
ORDER BY COUNT(NROCLIENTE) DESC;
|
Nesta instrução, a cláusula GROUP BY é utilizada para agrupar os dados por NROCLIENTE de forma que a função COUNT (*) possa retornar o número de PEDIDOS colocados
por cada cliente.
A cláusula HAVING filtra os dados para que apenas PEDIDOS com dois ou mais itens sejam retornados.
Finalmente, a saída é classificada usando a cláusula ORDER BY.
Resultado:
| NROCLIENTE |
PEDIDOS |
| 99 | 4 |
| 76 | 3 |
| 17 | 2 |
Veja também:
|