SQL GROUP, HAVING
Database그룹 함수 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;