English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 GROUP BY 구문이 반환하는 그룹을 필터링하는 방법을 배울 것입니다.
HAVING 구문은 일반적으로GROUP BY구문을 함께 사용하여 그룹이나 집합의 필터링 조건을 지정합니다. HAVING 구문은SELECT구문을 함께 사용하여
이를 쉽게 이해하기 위해 다음과 같은 예를 보겠습니다:employees와departments표.
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | 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 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ | |
표: employees | 표: departments |
이제, 직원과 그 부서의 이름을 찾기만 아니라 직원이 없는 부서의 이름도 찾아야 합니다.
작은 테이블에 대해서는 단순히 적용할 수 있습니다.좌 연결각 부서를 수동으로 확인할 수 있지만, 수천 명의 직원이 포함된 테이블이 있다고 가정해 보면 그렇지 않을 것입니다.
이 경우, HAVING 구문을 함께 사용하여GROUP BY구문을 함께 사용하여 예를 들어 다음과 같이 사용할 수 있습니다:
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;
위의 문장을 실행하면 다음과 같은 출력을 얻을 수 있습니다:
+------------------+-----------------+ | dept_name | total_employees | +------------------+-----------------+ | 고객 서비스 | 0 | +------------------+-----------------+
힌트:HAVING 문장은 WHERE 문장과 유사하지만, 그러나 전체 그룹에만 적용됩니다.WHERE문장은 단일 행에 적용됩니다.