예제로 사용될 릴레이션은 아래와 같다.
입력✏️
SELECT COUNT(*) FROM EMP;
출력🖥️
입력✏️
SELECT COUNT(COMM) FROM EMP;
출력🖥️
입력✏️
SELECT SUM(SAL), SUM(DISTINCT SAL) FROM EMP;
출력🖥️
입력✏️
SELECT AVG(SAL), AVG(DISTINCT SAL) FROM EMP;
출력🖥️
입력✏️
SELECT MAX(SAL), MAX(DISTINCT SAL) FROM EMP;
출력🖥️
입력✏️
SELECT MIN(SAL), MIN(DISTINCT SAL) FROM EMP;
출력🖥️
입력✏️
SELECT STDDEV(SAL), STDDEV(DISTINCT SAL) FROM EMP;
출력🖥️
입력✏️
SELECT VARIANCE(SAL), VARIANCE(DISTINCT SAL) FROM EMP;
출력🖥️
GROUP BY절은 SQL문에서 FROM절과 WHERE절 뒤에 오며, 데이터들을 작은 그룹으로 분류해 소그룹에 대한 항목별로 통계 정보를 얻을 때 추가로 사용된다.
GROUP BY절은 다음과 같은 특성을 가진다.
- GROUP BY절을 통해 소그룹별 기준을 정한 후, SELECT절에 집계함수를 사용한다.
- 집계함수의 통계 정보는 NULL값을 가진 행을 제외하고 수행한다.
- GROUP BY절에서는 SELECT절과는 달리 ALIAS명을 사용할 수 없다.
- 집계함수는 WHERE절에는 올 수 없다. (집계함수를 사용할 수 있는 GROUP BY 절보다 WHERE절이 먼저 수행된다.)
- WHERE절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거한다.
직업별로 몇명인지 출력하세요.
GROUP BY를 사용하여 SQL문을 작성하면 아래와 같다.
입력✏️
SELECT JOB, COUNT(*) FROM EMP GROUP BY JOB;
출력🖥️
HAVING절은 WHERE절과 비슷하지만 그룹을 나타내는 결과 집합의 행에 조건이 적용되다는 점에서 차이가 있다
HAVING 절은 다음과 같은 특성을 가진다.
- GROUP BY절의 기준 항목이나 소그룹의 집계함수를 이용한 조건을 표시할 수 있다.
- 일반적으로 GROUP BY절 뒤에 위치한다.
- 데이터 중 일부만 필요한 경우 WHERE절과 HAVING절을 사용하는 두가지 방법중 가능하면 WHERE절에서 조건절을 적용해 GROUP BY의 계산대상을 줄이는 것이 효율적이다.
직업별로 몇명인지 출력하세요 단, 사무원과 분석가만
위의 문제의 SQL문을 작성하면 아래와 같다.
입력✏️
SELECT JOB, COUNT(*) FROM EMP GROUP BY JOB
HAVING JOB IN ('ANALYST', 'CLERK');
출력🖥️
참고자료: SQL전문가가이드