Dico

SQL GROUP, HAVING

  • 민갤

그룹 함수 aggregate function

하나 이상의 행을 그룹으로 묶어서 연산한다.

NULL은 제외하고 연산한다.

SELECT 그룹함수(컬럼)
 FROM 테이블
 WHERE 조건;

SUM 

그룹의 총 합계를 반환한다.

MAX

그룹의 최댓값을 반환한다.

MIN

그룹의 최솟값을 반환한다.

AVG

그룹의 평균을 반환한다.

COUNT

그룹의 행 개수를 반환한다.

  • COUNT(*) : NULL을 포함한 모든 행의 개수를 반환한다.
  • COUNT(컬럼) : 해당 컬럼에서 NULL을 제외한 행의 개수를 반환한다.

SELECT SUM(salary)
    , MAX(salary)
    , MIN(salary)
    , AVG(salary)
    , COUNT(commission_pct)
 FROM employees;

GROUP BY절

그룹 함수의 기준.

컬럼의 별칭을 사용할 수 없다.

SELECT 컬럼1, 그룹함수(컬럼2)
 FROM 테이블
 WHERE 조건
 GROUP BY 컬럼1;

  • SELECT문에 단순 컬럼과 그룹 함수가 함께 존재할 경우

     컬럼1은 그룹 함수를 적용하지 않은 단순 컬럼이다.

     단순 컬럼은 반드시 GROUP BY절에 명시해야 한다.

     단순 컬럼을 GROUP BY절에 명시하지 않으면 그룹 함수의 결과와 개수가 일치하지 않아 에러가 발생한다.

  • GROUP BY절에 명시한 컬럼은 SELECT 문에서 명시하지 않아도 된다.
SELECT SUM(salary)
 FROM employees
 GROUP BY employee_id;


HAVING절

그룹 함수의 조건절.

그룹 함수의 결과 값에(GROUP BY) 조건식을 적용한다(HAVING).

SELECT 컬럼1, 컬럼2, 그룹함수
 FROM 테이블명
 WHERE 조건절
 GROUP BY 컬럼1, 컬럼2
 HAVING 그룹함수 조건
 ORDER BY 컬럼1;
SELECT last_name
    , SUM(salary)
 FROM employees
 GROUP BY last_name
 HAVING SUM(salary) >= 5000
 ORDER BY last_name;