분석 함수 (1) – 평균 함수, 순위 함수
0. 분석 함수란?
0-1. 개념
분석 함수는 특정 집합 내에서 결과 건수의 변화없이 해당 집합안에서 합계 및 카운트 등을 계산할 수 있는 함수이다.
0-2. 분석 함수 실습 준비
1 | CREATE TABLE PRODUCT_GROUP ( |
1 | INSERT INTO PRODUCT_GROUP (GROUP_NAME) |
1 | SELECT * FROM PRODUCT_GROUP; |
1 | SELECT * FROM PRODUCT; |
0-3. 분석 함수 문법
1 | SELECT |
- 분석함수(C2, C3,…) : 사용하고자 하는 분석함수와 적용할 대상 컬럼을 지정
- PARTITION BY : 분석 함수를 적용 시 기준이 되는 컬럼을 지정 (즉, 그룹별로 값을 구할 때 그룹핑의 기준 컬럼)
- ORDER BY : 정렬 컬럼을 지정
0-4. 분석 함수 결과 예시
집계 함수 vs 분석 함수:
-
집계 함수는 집계의 결과만 출력한다
-
분석 함수는 집계의 결과 및 테이블의 내용을 함계 출력한다.
–> 이게 바로 분석 함수의 역할이다.
1 | -- 집계 함수 |
1 | -- 분석 함수 |
1. AVG 함수
1-1. 개념
AVG 함수는 특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 평균을 구하는 함수이다.
1-2. AVG 함수 실습
1 | SELECT * FROM PRODUCT_GROUP; |
1 | SELECT * FROM PRODUCT; |
(1) 전체 평균 가격(PRICE) 구하기
>> 집계함수 사용
-
AVG: 집계의 결과만 출력
1
2
3
4
5-- 집계 함수(AVG): 집계의 결과만 출력
SELECT
AVG(PRICE)
FROM
PRODUCT;
>> 분석함수 사용
-
AVG ( ) OVER ( ) : 결과 집합을 그대로 출력하면서 집계 결과도 함계 출력
1
2
3
4
5
6
7-- 분석 함수
SELECT
PRODUCT_NAME,
PRICE,
AVG(PRICE) OVER()
FROM
PRODUCT;
(2) 그룹별 평균 가격(PRICE) 구하기
>> 집계함수 사용
-
GROUP BY + AVG: 집계의 결과만 출력
1
2
3
4
5
6
7
8
9-- 집계 함수: GROUP BY + AVG
SELECT
B.GROUP_NAME,
AVG(A.PRICE)
FROM PRODUCT A
INNER JOIN PRODUCT_GROUP B
ON (A.GROUP_ID = B.GROUP_ID)
GROUP BY
B.GROUP_NAME;
>> 분석함수 사용
-
AVG (C1) OVER ( PARTITION BY C2 ) : 결과 집합을 그대로 출력하면서 집계 결과도 함계 출력
1
2
3
4
5
6
7
8
9
10
11-- 분석 함수
SELECT
A.PRODUCT_NAME,
A.PRICE,
B.GROUP_NAME,
AVG(A.PRICE) OVER (PARTITION BY B.GROUP_NAME)
FROM
PRODUCT A
INNER JOIN
PRODUCT_GROUP B
ON A.GROUP_ID = B.GROUP_ID;
(3) 그룹별 누적 평균 가격(PRICE) 구하기
>> 분석함수 사용
-
AVG (C1) OVER ( PARTITION BY C2 ORDER BY C3 )
1
2
3
4
5
6
7
8
9
10SELECT
A.PRODUCT_NAME,
A.PRICE,
B.GROUP_NAME,
AVG(A.PRICE) OVER (PARTITION BY B.GROUP_NAME ORDER BY A.PRICE)
FROM
PRODUCT A
INNER JOIN
PRODUCT_GROUP B
ON A.GROUP_ID = B.GROUP_ID;
2. ROW_NUMBER, RANK, DENSE_RANK 함수
2-1. 개념
ROW_NUMBER, RANK, DENSE_RANK 함수는 모두 특정 집합 내에서 결과 건수의 변화 없이 해당 집합안에서 특정 컬럼의 순위를 구하는 함수이다.
-
ROW_NUMBER: 같은 순위가 있어도 무조건 순차적으로 순으로 순위를 매긴다. (1, 2, 3, 4, 5 …)
-
RANK: 같은 순위가 있으면 동일 순위로 매기고 그 다음 순위를 건너뛰다. (1, 1, 3, 4, 5 …)
-
DENSE_RANK: 같은 순위가 있으면 동일 순위로 매기고 그 다음 순위를 건너뛰지 않는다. (1, 1, 2, 3, 4 …)
2-2. 순위 함수 실습
1 | SELECT * FROM PRODUCT_GROUP; |
1 | SELECT * FROM PRODUCT; |
2-2-1. ROW_NUMBER 함수 실습
ROW_NUMBER: 같은 순위가 있어도 무조건 순차적으로 순으로 순위를 매긴다. (1, 2, 3, 4, 5…)
1 | SELECT |
- Laptop 에서 가격순으로 정렬했을 때 "Sony VAIO"와 "Lenovo Thinkpad"의 가격이 동일해도 (즉, 가격 순위 같아도) 순차적으로 순번을 부여한다
2-2-2. RANK 함수 실습
RANK: 같은 순위가 있으면 동일 순위로 매기고 그 다음 순위는 건너뛰다. (1, 1, 3, 4, 5 …)
1 | SELECT |
2-2-3. DENSE_RANK 함수 실습
DENSE_RANK: 같은 순위가 있으면 동일 순위로 매기고 그 다음 순위를 건너뛰지 않는다. (1, 1, 2, 3, 4 …)
1 | SELECT |