자료 값의 개수를 세는 등의 목적으로 이용하는 distinct
함수는 중복 자료를 제거해 버리기 때문에 집계함수(count, sum, max...)
와 함께 사용할 수 없다.
group by
함수는 데이터를 그룹핑해서 그 결과를 가져오므로 집계함수와 짝을 이루어 사용할 수 있다.
DEPARTMENT_ID
값이 같은 자료들을 그룹화하여 가져오는 예시
SELECT DEPARTMENT_ID FROM EMPLOYEES e GROUP BY DEPARTMENT_ID ;
DEPARTMENT_ID
값이 같은 각 그룹의SALARY
값 합계를 가져오는 예시
SELECT DEPARTMENT_ID , SUM(SALARY) FROM EMPLOYEES e GROUP BY DEPARTMENT_ID ;
GROUP BY
함수에,
를 사용하면 명시한 열의 순서대로 다중 그룹화가 가능하다.
DEPARTMENT_ID
안에서JOB_ID
로 한 번 더 그룹화한 그룹들의 각 그룹 인원수와SALARY
평균을 가져오는 예시SELECT DEPARTMENT_ID , JOB_ID , COUNT(JOB_ID) , AVG(SALARY) FROM EMPLOYEES e GROUP BY DEPARTMENT_ID , JOB_ID ORDER BY DEPARTMENT_ID , JOB_ID ;
ORDER BY
함수도 같은 방식으로 나열해서 사용할 수 있다.
HAVING
은 집계함수를 가지고 조건비교를 할 때 사용하는 함수이다.
HAVING
절은 단독으로 사용할 수 없으며 반드시GROUP BY
절과 함께 사용한다.
WHERE
절에서는 집계함수를 사용할 수 없다. 쿼리문 하단에GROUP BY
와HAVING
을 쌍으로 사용하여 집계함수를 통한 조건비교를 수행할 수 있다.DEPARTMENT_ID
가 같은 자료들의 그룹 중 총 자료수가 10 이상인 그룹을 가져오는 예시SELECT DEPARTMENT_ID , COUNT(*) FROM EMPLOYEES e WHERE DEPARTMENT_ID IS NOT NULL // DEPARTMENT_ID가 NULL이 아닌 자료들만 취급한다 GROUP BY DEPARTMENT_ID HAVING COUNT(*) >= 10 ;