GROUP BY/HAVING

한준수·2023년 5월 31일
0

SQLD

목록 보기
20/31

다중행 집계 함수(Aggregate Function)

  • 여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수이다.
  • GROUP BY절은 행들을 소그룹화 한다.
  • SELECT 절,HAVING 절,ORDER BY 절에 사용할 수 있다.
  • 해당칼럼에 값이 NULL인 것을 제외하고 계산한다.
    • COUNT(*)은 NULL값을 포함한 행의 수를 계산한다.

EX)
TEST 테이블

A B C D
NULL NULL 50 30
30 20 10 30
NULL 10 NULL NULL
SELECT COUNT(A)
FROM TEST; -> 1

SELECT COUNT(*)
FROM TEST;

// 각 행 별로 묶어서 계산하면 된다.
// SUM(B + C) 에서 첫 계산은 NULL + 50 = NULL...
SELECT SUM(A) + SUM(B + C) + SUM(D)
FROM TEST;  -> 120

SELECT SUM(A) + SUM(B) + SUM(C) + SUM(D)
FROM TEST; -> 180


GROUP BY

GROUP BY 절은 SQL 문에서 FROM 절과 WHERE 절 뒤에 오며, 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별로 통계 정보를 얻을 때 추가로 사용된다.

GROUP BY / HAVING 특징

  • GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계함수를 사용한다.
    • ORDER BY 절은 SELECT절에 정의되지 않은 컬럼 사용가능
  • 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.
  • GROUP BY 절에서는 SELECT절과는 달리 ALIAS명을 사용할 수 없다.
  • 집계 함수는 WHERE 절에는 올 수 없다.
  • HAVING 절에는 집계함수를 이용하여 조건을 표시할 수 있다.
  • GROUP BY절은 조건을 WHERE절이 아닌 HAVING절에 기술한다.
  • HAVING절은 일반적으로 GROUP BY 절 뒤에 위치한다.

형식

SELECT 칼럼명, 그룹함수
FROM 테이블명
WHERE 조건 (연산자)
GROUP BY 칼럼명
[HAVING] 조건 (연산자 그룹함수 사용가능);

-------------------------------------------
// 부서의 급여 최대값과 최소값을 구하되 최대 급여가 2900 이상인 부서만 출력
SELECT DEPTNO, MAX(SAL), MIN(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING MAX(SAL) > 2900;
profile
응애에요

0개의 댓글