[MySQL] RANK 함수

이지IT
|2023. 4. 24. 21:13
반응형
RANK 관련 함수

SQL 창 함수는 현재 행과 관련된 일련의 행에서 계산을 수행하는 함수 클래스입니다. OVER() 절과 함께 사용되며 결과 집합의 특정 행 창을 기반으로 계산을 수행할 수 있습니다. 창 함수는 행을 집계 함수처럼 그룹화하지 않습니다. 대신 결과 집합 내 행의 "창"에서 작동합니다. 다음은 몇 가지 일반적인 창 함수와 예제입니다.

1. ROW_NUMBER(): 결과 집합 내의 각 행에 고유 번호를 할당합니다.

SELECT id, product, sale_date, amount,
       ROW_NUMBER() OVER (ORDER BY sale_date) AS row_num
FROM sales;

 

2. RANK():
동일한 값을 가진 행에 대해 동일한 순위를 사용하여 결과 집합 내의 각 개별 행에 고유한 순위를 할당합니다. 동일한 값을 가진 행은 동일한 순위를 받고 다음 순위에 대한 시퀀스에 간격이 나타납니다.

SELECT id, product, sale_date, amount,
       RANK() OVER (ORDER BY amount DESC) AS rank
FROM sales;

 

3. DENSE_RANK(): RANK()와 유사하지만 동일한 순위 값이 있는 경우 순위 시퀀스에 간격이 없습니다.

SELECT id, product, sale_date, amount,
       DENSE_RANK() OVER (ORDER BY amount DESC) AS dense_rank
FROM sales;

 

4. NTILE(n):
행을 지정된 수의 그룹(n)으로 분배합니다. 각 그룹은 가능한 경우 동일한 수의 행을 포함합니다. 값이 같은 행은 같은 그룹에 배치됩니다.

SELECT id, product, sale_date, amount,
       NTILE(4) OVER (ORDER BY amount) AS quartile
FROM sales;

 

5. LAG(열, n, 기본값_값):
결과 집합 내에서 현재 행보다 n행 앞에 있는 행에 대해 지정된 열의 값을 반환합니다. 행이 없으면 default_value가 반환됩니다.

SELECT id, product, sale_date, amount,
       LAG(amount, 1) OVER (ORDER BY sale_date) AS prev_amount
FROM sales;

 

6. LEAD(열, n, 기본값_값):
결과 집합 내에서 현재 행 다음의 n행에 대해 지정된 열의 값을 반환합니다. 행이 없으면 default_value가 반환됩니다.

SELECT id, product, sale_date, amount,
       LEAD(amount, 1) OVER (ORDER BY sale_date) AS next_amount
FROM sales;

 

7. PARTITION BY의 예:

SELECT name, subject, score, RANK() OVER (PARTITION BY subject ORDER BY score DESC) AS rank
FROM students;


이 쿼리는 각 과목 내 점수를 기준으로 학생의 순위를 매깁니다.

 

8. CUME_DIST()(PostgreSQL, SQL 서버 및 Oracle):
CUME_DIST()는 결과 집합 내 값의 누적 분포를 계산하는 상대 순위 함수입니다. 지정된 순서 열에서 현재 행의 값보다 작거나 같은 행의 비율을 나타내는 0과 1 사이의 분수로 행의 상대적 순위를 반환합니다.

SELECT name, score, CUME_DIST() OVER (ORDER BY score DESC) AS cum_dist
FROM students;


이 쿼리는 학생 점수의 누적 분포를 계산합니다.

9. PERCENT_RANK()(PostgreSQL, SQL 서버 및 Oracle):
PERCENT_RANK()는 결과 집합 내 행의 백분위수 순위를 계산하는 상대 순위 함수입니다. 지정된 순서 열에 있는 모든 값 중에서 현재 행 값의 상대적 위치를 나타내는 0과 1 사이의 값을 반환합니다. 계산은 순위를 기준으로 하지만 결과는 0과 1 사이에서 정규화됩니다.

SELECT name, score, PERCENT_RANK() OVER (ORDER BY score DESC) AS pct_rank
FROM students;


이 쿼리는 학생 점수의 백분위수 순위를 계산합니다.

반응형

'SQL' 카테고리의 다른 글

[SQL] MySQL 변수와 내장 함수  (2) 2023.05.09
[SQL] MySQL 데이터 유형과 종류  (0) 2023.05.08
[SQL] SQL MATH 함수  (0) 2023.04.24
[SQL] SQL GROUP 함수  (0) 2023.04.24
[SQL] SQL, SQL server 날짜와 시간 데이터 가져오기  (0) 2023.04.23