SQL- GROUP BY, HAVING절

박현·2022년 10월 4일
0

SQL

목록 보기
16/34

예제로 사용될 릴레이션은 아래와 같다.

  • EMP 릴레이션

집계함수의 특성

  • 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수이다.
  • GROUP BY절은 행들을 소그룹화한다.
  • SELECT, HAVING, ORDER BY절에 사용할 수 있다.

집계함수의 종류

COUNT(*) : NULL값을 포함한 행의 수를 출력

입력✏️

SELECT COUNT(*) FROM EMP;

출력🖥️

COUNT(표현식) : 표현식의 값이 NULL값인 것을 제외한 행 수를 출력

입력✏️

SELECT COUNT(COMM) FROM EMP;

출력🖥️

SUM([ DISTINCT | ALL ]표현식) : 표현식의 NULL 값을 제외한 합계를 출력

입력✏️

SELECT SUM(SAL), SUM(DISTINCT SAL) FROM EMP;

출력🖥️

AVG([ DISTINCT | ALL ]표현식) : 표현식의 NULL 값을 제외한 평균을 출력

입력✏️

SELECT AVG(SAL), AVG(DISTINCT SAL) FROM EMP;

출력🖥️

MAX([ DISTINCT | ALL ]표현식) : 표현식의 최댓값을 출력

입력✏️

SELECT MAX(SAL), MAX(DISTINCT SAL) FROM EMP;

출력🖥️

MIN([ DISTINCT | ALL ]표현식) : 표현식의 최소값을 출력

입력✏️

SELECT MIN(SAL), MIN(DISTINCT SAL) FROM EMP;

출력🖥️

STDDEV([ DISTINCT | ALL ]표현식) : 표현식의 표준 편차를 출력

입력✏️

SELECT STDDEV(SAL), STDDEV(DISTINCT SAL) FROM EMP;

출력🖥️

VARIANCE/ VAR([ DISTINCT | ALL ]표현식) : 표현식의 분산을 출력

입력✏️

SELECT VARIANCE(SAL), VARIANCE(DISTINCT SAL) FROM EMP;

출력🖥️


GROUP BY절

  • 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 절

  • 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전문가가이드

0개의 댓글