그룹함수(다중행 함수)
- 한꺼번에 여러개의 데이터를 함수로 입력하는 것
SELECT AVG(SALARY), SUM(MIN_SALARY)
FROM EMPLOYEES;
- *를 사용하면 NULL값까지 출력되고, 컬럼값을 작성하면 NULL값은 제외됨
SELECT COUNT(*), COUNT(COMM)
FROM EMP;
-- COUNT(*): 12 / COUNT(COMM): 4
-- COUNT(*)는 NULL을 포함하고, COUNT(COMM)은 NULL을 포함하지 않음
GROUP BY절
- 제시한 조건에 맞는 결과를 모아주는 키워드
- 그룹함수와 함께 사용 가능
SELECT COUNT(*)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
-- DEPARTMENT_ID별로 SELECT절을 실행해줌
SELECT COUNT(*)
FROM EMP
GROUP BY EMP_TYPE, DEPT_NO;
-- EMP_TYPE별로 묶은 후, DEPT_NO별로 묶어서 SELECT절 실행
- SELECT절에 사용한 컬럼과 GROUP BY에 사용한 컬럼이 반드시 일치해야 하므로 주의
SELECT DEPT_NO, JOB, AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPT_NO
-- 오류발생. GROUP BY와 SELECT가 일치하지 않음
SELECT DEPT_NO, JOB, AVG(SALARY)
FROM EMPLOYEES
GROUP BY DEPT_NO, JOB
-- GROUP BY와 SELECT가 일치하므로 정상 실행
HAVING절
- 그룹함수의 조건식으로 사용
- GROUP BY절과 함께 사용해야하며 단독 사용 불가능
SELECT DEPARTMENT_ID, COUNT(*)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING COUNT(*) <= 10;
SELECT DEPARTMENT_ID, COUNT(*)
FROM EMPLOYEES
WHERE HIRE_DATE >= '2005/01/01' AND HIRE_DATE < TO_DATE('2005/12/31')+1
GROUP BY DEPARTMENT_ID
HAVING COUNT(*) >= 10;
-- 일반컬럼은 WHERE절로 필터링