
💡 ROW_NUMBER 문법이 계속 헷갈려서 집중 연습했다.
95점에서 시작해서 4연속 100점까지!
PARTITION BY() OVER() dept_id ORDER BY salary AS rn
뭔가 다 섞여버렸다... ㅋㅋ
ROW_NUMBER() OVER(PARTITION BY dept_id ORDER BY salary DESC) AS rn
순서 외우자!
ROW_NUMBER() OVER(PARTITION BY 그룹 ORDER BY 정렬 DESC) AS rn
└─ 함수 ──┘ └───────── 전부 OVER() 안에! ─────────┘
| 순서 | 요소 |
|---|---|
| 1 | ROW_NUMBER() |
| 2 | OVER( |
| 3 | PARTITION BY 컬럼 |
| 4 | ORDER BY 컬럼 DESC |
| 5 | ) |
| 6 | AS 별칭 |
PARTITION BY와 ORDER BY는 OVER() 안에 들어간다!
ROW_NUMBER() OVER(PARTITION BY store_id ORDER BY amount DESC AS rn
↑ ) 빠짐!
ROW_NUMBER() OVER(PARTITION BY store_id ORDER BY amount DESC) AS rn
↑ 여기!
급하게 풀면 괄호 빠뜨림. AS 앞에 ) 있는지 확인!
SELECT store_id, sales_id, amount
↑ 's' 하나 더 붙음
SELECT store_id, sale_id, amount
테이블 컬럼명 잘 보고 쓰자. 제출 전에 한 번 더 체크!
4문제 연속 100점 맞은 공식:
-- 그룹별 Top 1 공식
WITH ranked AS (
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY 그룹컬럼 ORDER BY 기준컬럼 DESC) AS rn
FROM 테이블
)
SELECT *
FROM ranked
WHERE rn = 1;
| 문제 | PARTITION BY | ORDER BY |
|---|---|---|
| 부서별 최고 연봉 | dept_id | salary DESC |
| 유저별 최근 주문 | user_id | order_date DESC |
| 카테고리별 최고가 상품 | category | price DESC |
| 매장별 최고 매출 | store_id | amount DESC |
| 문제 | 점수 | 실수 |
|---|---|---|
| 복습 2-1 | 95점 | 괄호, 오타 |
| 복습 2-2 | 100점 | - |
| 복습 2-3 | 100점 | - |
| 복습 2-4 | 100점 | - |
95점 → 100점 4연속! 🔥
| 항목 | 상태 |
|---|---|
| JOIN 문법 | ✅ |
| GROUP BY + HAVING | ✅ |
| LEFT JOIN + IS NULL | ✅ |
| ROW_NUMBER | ✅ 완전 정복! |
| LAG | 🟢 |
| 날짜 범위 | 🟡 연습 필요 |
📝 ROW_NUMBER는 결국 순서 외우기다.
ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ... DESC) AS rn
4번 반복하니까 손에 익었다!
