sqld 공부를 한지도 어언 2년이 다 되어서 헷갈리는 개념들이 많아졌다.
그 중 하나가 윈도우 함수!
윈도우 함수는 기본적으로
같은 그룹 내 다른 행들과의 관계를 계산하기 위해 사용하는 함수이다.
그룹을 묶는다는 점에서 GROUP BY와 유사하지만
그룹을 하나의 행으로 줄여버리는 GROUP BY와 다르게 윈도우 함수는 행의 개수를 유지한 채 계산을 수행할 수 있다.
윈도우 함수의 기본 문법은 아래와 같다.
함수명() OVER (
PARTITION BY 그룹기준
ORDER BY 정렬기준
)
- 자주 사용하는 윈도우 함수
1. ROW_NUMBER() : 그룹 내에서 각 행에 고유 번호 (1, 2, 3…)
2. RANK() : 동점 점수 허용 (1, 1, 3...)
3. DENSE_RANK() : 순위를 연속적으로 부여 (예: 1, 1, 2…)
4. SUM() : 누적합
- 사용하면 좋을 상황
1. 월별 누적 매출 구하기
2. 카테고리별 TOP1 상품 뽑기
프로그래머스의 '식품분류별 가장 비싼 식품의 정보 조회하기' 문제를 풀면서 기존에 서브쿼리를 사용했었는데
윈도우 함수를 이용한 풀이가 많아서 개념을 정리해보게 되었다.
// 서브쿼리 사용
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
AND (CATEGORY, PRICE) IN (
SELECT CATEGORY, MAX(PRICE)
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
GROUP BY CATEGORY
)
ORDER BY PRICE DESC;
// 윈도우 함수 사용
SELECT CATEGORY, PRICE, PRODUCT_NAME
FROM (
SELECT *,
RANK() OVER (PARTITION BY CATEGORY ORDER BY PRICE DESC) AS RK
FROM FOOD_PRODUCT
WHERE CATEGORY IN ('과자', '국', '김치', '식용유')
) RANKED
WHERE RK = 1 // MAX 값
ORDER BY PRICE DESC;
반응형
'기타' 카테고리의 다른 글
기계 고객 (1) | 2024.12.04 |
---|---|
중앙은행 디지털 화폐(CBDC) (0) | 2024.12.03 |
웹 3.0 (0) | 2024.12.02 |
빅테크 규제 (1) | 2024.12.01 |