English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá como filtrar os grupos retornados pela cláusula GROUP BY.
A cláusula HAVING geralmente é usada comGROUP BYUse as cláusulas para especificar condições de filtragem de grupos ou conjuntos. A cláusula HAVING pode ser usada apenas comSELECTexpressões juntas.
Para facilitar a compreensão, vamos ver a seguiremployeesedepartmentsTabela.
+--------+--------------+------------+---------+ | emp_id | emp_name | data_de_contratação | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administração | | 2 | Serviço ao Cliente | | 3 | Finanças | | 4 | Recursos Humanos | | 5 | Vendas | +---------+------------------+ | |
Tabela: employees | Tabela: departments |
Agora, não só é necessário encontrar o nome dos funcionários e seus departamentos, mas também os nomes dos departamentos sem funcionários.
Para tabelas pequenas, pode-se simplesmente aplicarJunção esquerdae verificar manualmente cada departamento, mas suponha que uma tabela contenha milhares de funcionários, isso não seria tão fácil.
Neste caso, pode-se usar a cláusula HAVING comGROUP BYUse as uma cláusula junção, conforme mostrado a seguir:
SELECT t1.dept_name, count(t2.emp_id) AS total_employees FROM departments AS t1 LEFT JOIN employees AS t2 ON t1.dept_id = t2.dept_id GROUP BY t1.dept_name HAVING total_employees = 0;
Se executar a instrução acima, você obterá a seguinte saída:
+------------------+-----------------+ | dept_name | total_employees | +------------------+-----------------+ | Serviço ao Cliente | 0 | +------------------+-----------------+
Dica:A cláusula HAVING é semelhante à cláusula WHERE, mas aplica-se apenas a grupos inteiros, enquantoWHEREA cláusula se aplica a linhas individuais.