집계 함수
- 여러 행으로부터 하나의 결괏값을 반환하는 함수이다.
- SELECT 구문에서만 사용되며, 이전에 다룬 기본 함수들이 행(row)끼리 연산을 수행했다면, 집계 함수는 열(column)끼리 연산을 수행한다.
- 주로 평균, 합, 최대, 최소 등을 구하는 데 사용된다.
- COUNT
- 특정한 기준을 충족하는 ROWS의 수 리턴
- COUNT(*)를 제외하고 NULL 값은 세지 않는다.
SELECT COUNT(컬럼)
FROM 테이블명
SELECT COUNT(DISTINCT 컬럼) -- 중복되는 값은 기존의 값은 남고 제거
FROM 테이블명
- AVG
- 숫자형 COLUMN의 평균값을 리턴
- NULL 값은 제외된다.
- NULL 값을 데이터에서 제외하고 평균을 구하려면 AVG를 쓰면 된다. 하지만, NULL 값을 포함해서 평균을 구하려면 SUM으로 총합을 구한 후 COUNT(*)로 나눠야한다.
SELECT AVG(컬럼)
FROM 테이블명
SELECT SUM(컬럼) / COUNT(*) -- NULL 값을 포함하여 평균을 구할 경우
FROM 테이블명
- SUM
- 숫자형 COLUMN의 총합을 리턴한다.
- NULL 값은 제외된다.
SELECT SUM(컬럼)
FROM 테이블명
- MIN
SELECT MIN(컬럼)
FROM 테이블명
- MAX
SELECT MAX(컬럼)
FROM 테이블명
- GROUP BY
- 테이블의 일부 행을 대상으로 집계 함수를 사용할 수 있다.
SELECT 컬럼, SUM(컬럼)
FROM 테이블명
GROUP BY 컬럼
- HAVING
- GROUP BY와 함께 쓰이는 조건문으로 집계 함수와 함께 사용가능하다.
SELECT 컬럼, AVG(컬럼)
FROM 테이블명
GROUP BY 컬럼
HAVING 'GROUP BY조건'
분석 함수
- SELECT 절과 ORDER BY 구문에서 사용 가능
- FROM / WHERE / GROUP BY 절에서 사용 불가
- 쿼리 결과 SET을 대상으로 계산을 수행하는 함수
1. PARTITION BY : 분석 함수로 계산될 대상 로우 그룹(파티션)을 지정한다.
SELECT
USER_NO
,USER_NAME
,USER_AGE
,SUN(USER_AGE) OVER(PARTITION BY USER_NO) USER_AGE_SUM
FROM USER
2. ORDER BY : 파티션 안에서의 순서를 지정
3. WINDOW... : 파티션으로 분할된 그룹에서 더 상세한 그룹으로 분할할 때 사용
집계 함수 VS 분석 함수
- 집계함수는 그룹별 최대, 최소, 합계, 평균, 건수 등을 구할 때 사용되며, 그룹별 1개의 행을 반환한다.
- 분석함수는 그룹 단위로 값을 계산한다는 점에서 집계 함수와 유사하지만, 그룹 마다가 아니라 결과 Set의 각 행마다 집계결과를 보여준다는 점에서 집계함수와 상당한 차이가 있다.
ex) group by 는 공통점을 가진 행끼리 묶어서 대표값만 나오기에 1개의 행
partition by는 대표값만 나오는게 아니라 모든 행에 집계결과를 보여주기에 여러개의 행을 보여준다.