SQL 윈도우 함수
윈도우 함수는 SQL에서 행들을 기반으로 계산을 수행하는 함수입니다.
이 함수들은 "윈도우" 또는 "창"이라고 불리는 특정 데이터 세트의 부분에 대해 계산을 수행하며,
이를 통해 행 간의 상대적인 관계를 분석할 수 있습니다.
윈도우 함수는 OVER() 절을 사용하여 정의되며, 이 절 내에서 윈도우의 범위를 지정합니다.
1. NTILE(n)
- 결과 집합을 n개의 동일한 크기의 그룹으로 나눕니다. 각 그룹은 번호가 매겨지며, n값에 따라 그룹의 개수가 결정
- 'PARTITION BY'를 추가하여 category별 계산
SELECT category,
value,
NTILE(2) OVER (PARTITION BY category ORDER BY value) AS bucket
FROM example_data;
# 결과
+---------+-------+--------+
|category | value | bucket |
+---------+-------+--------+
| A | 10 | 1 |
| A | 20 | 1 |
| A | 30 | 2 |
| B | 5 | 1 |
| B | 15 | 2 |
+---------+-------+--------+
2. FIRST_VALUE() / LAST_VALUE()
- FIRST_VALUE(): 창에 속한 첫 번째 행 반환
- LAST_VALUE(): 창에 속한 마지막 행 반환
- 'PARTITION BY'를 추가하여 category별 계산
# FIRST_VALUE()
SELECT
category,
value,
FIRST_VALUE(value) OVER (PARTITION BY category ORDER BY value) AS first_value
FROM example_data;
# FIRST_VALUE() 결과
+----------+-------+-------------+
| category | value | first_value |
+----------|-------|-------------+
| A | 10 | 10 |
| A | 20 | 10 |
| B | 30 | 10 |
| B | 5 | 5 |
| B | 15 | 5 |
+----------|-------|-------------+
----------------------------------------------------------------------------------
# LAST_VALUE()
SELECT
category,
value,
LAST_VALUE(value) OVER (PARTITION BY category ORDER BY value) AS last_value
FROM example_data;
# LAST_VALUE() 결과
+----------+-------+------------+
| category | value | last_value |
+----------|-------|------------+
| A | 10 | 30 |
| A | 20 | 30 |
| B | 30 | 30 |
| B | 5 | 15 |
| B | 15 | 15 |
+----------|-------|------------+
3. PERCENT_RANK()
- 각 행에 대해 백분율 순위를 할당
SELECT
category,
value,
PERCENT_RANK() OVER (PARTITION BY category ORDER BY value) AS percent_rank
FROM example_data;
# 결과
+----------+-------+--------------+
| category | value | percent_rank |
+----------+-------+--------------+
| A | 10 | 0 |
| A | 20 | 0.5 |
| B | 30 | 1 |
| B | 5 | 0 |
| B | 15 | 1 |
+----------+-------+--------------+
4. CUME_DIST()
- 각 행에 대해 누적 분포를 나타내는 값을 할당
SELECT
category,
value,
CUME_DIST() OVER (PARTITION BY category ORDER BY value) AS cume_dist
FROM example_data;
# 결과
+----------+-------+-----------+
| category | value | cume_dist |
+----------+-------+-----------+
| A | 10 | 0.3333333 |
| A | 20 | 0.6666666 |
| B | 30 | 1 |
| B | 5 | 0.5 |
| B | 15 | 1 |
+----------+-------+-----------+
본 게시글은 ChatGPT의 도움을 받아 작성하였습니다.
'Language > MySQL' 카테고리의 다른 글
SQL 기본 명령어 (0) | 2024.01.08 |
---|---|
가상 테이블 생성 (0) | 2024.01.07 |
CONCAT 함수 (0) | 2024.01.05 |
재귀 함수 (0) | 2024.01.04 |
DataBase (데이터베이스) (2) | 2024.01.03 |