GROUP BY(그룹화)는 SELECT 절에서 집계함수와 단순칼럼이 복합적으로 선택될 때 사용됩니다.
1. GROUP BY
GROUP BY절은 NULL을 제외하지 않고 그룹화하여 로우의 가장 아래에 생성합니다.
먼저 SELECT 절에 스칼라를 선택하는 쿼리를 작성하였습니다.
스칼라는 쿼리의 결과가 하나인 것을 의미합니다.
SELECT
MAX(salary)
FROM
employees;
결과에서도 알 수 있듯이,
집계함수가 단독적으로 사용된다면 그룹화는 필요 없습니다.
하지만 집계함수와 단순칼럼이나 표현식이 함께 사용된다면 GROUP BY 절이 사용되야 합니다.
고용된 날짜 별 총 급여를 쿼리로 작성하였습니다.
SELECT
TO_CHAR(hire_date, 'YYYY/MM') AS 고용연월,
SUM(salary) AS "총 급여"
FROM
employees
GROUP BY
TO_CHAR(hire_date, 'YYYY/MM')
ORDER BY
1 ASC;
위 쿼리는 TO_CHAR를 그룹화하여 해당 고용날짜에 해당하는 사원의 총 급여에 대한 쿼리입니다.
만약 SELECT절에 추가적인 칼럼이나 표현식이 선택되면 GROUP BY절에서 추가적인 그룹화가 필요합니다.
2. HAVING
HAVING절은 그룹화와 함께 사용됩니다.
HAVING절은 GROUP BY를 통해 그룹화하고 로우(row, 행)가 아닌 그룹을 제외시킬 수 있습니다.
또한 WHERE절에서는 사용이 불가능한 집계함수를 HAVING절에서는 사용할 수 있습니다.
SELECT
TO_CHAR(hire_date, 'YYYY/MM') AS 고용연월,
SUM(salary) AS "총 급여"
FROM
employees
GROUP BY
TO_CHAR(hire_date, 'YYYY/MM')
HAVING
SUM(salary) >= 10000
ORDER BY
1 ASC;
위 쿼리처럼 HAVING절은 집계함수 사용이 가능하며, WHERE절과 같은 그룹에 대한 필터링을 수행합니다.