
💡 LAG/LEAD 11문제 풀면서 확실히 정복했다!
실수하면서 배운 것들 정리.
WITH leaded AS (
SELECT temp_date, temperature,
LEAD(temperature) OVER(ORDER BY temp_date) AS tomorrow
FROM daily_temp
)
SELECT temp_date, temperature, tomorrow
FROM daily_temp -- ❌ 원본 테이블
WHERE temperature > tomorrow;
FROM leaded -- ✅ CTE에서!
CTE에서 새 컬럼 만들면 → FROM도 CTE에서!
tomorrow 컬럼은 원본 테이블에 없어!
LEAD(month, 2) -- ❌ 날짜 가져옴
LEAD(sales, 2) -- ✅ 매출 가져와야지!
비교할 값을 LEAD/LAG에 넣어야 해!
매출 비교면 sales, 주가 비교면 price!
AS 2m_later -- ❌ 숫자로 시작
AS next_2m_sales -- ✅ 문자로 시작
AS m2_later -- ✅ 이것도 가능
SQL 별칭은 숫자로 시작 못함!
-- 감소한 날
WHERE revenue < prev_revenue -- ✅ 오늘 < 전일
-- 증가한 날
WHERE revenue > prev_revenue -- ✅ 오늘 > 전일
| 상황 | 조건 |
|---|---|
| 오늘이 감소 | today < prev |
| 오늘이 증가 | today > prev |
| 다음날 감소 예정 | today > next |
| 다음날 증가 예정 | today < next |
WHERE user_count > tomorrow_user
| user_count | tomorrow_user | 결과 |
|---|---|---|
| 1100 | 950 | TRUE ✅ |
| 1200 | NULL | NULL → 제외! |
NULL과 비교하면 결과도 NULL!
→ WHERE는 TRUE만 통과
→ NULL은 자동으로 걸러짐!
LAG(컬럼) OVER(ORDER BY 정렬) -- 이전 행
LEAD(컬럼) OVER(ORDER BY 정렬) -- 다음 행
LAG(컬럼, 2) OVER(ORDER BY 정렬) -- 2행 전
LEAD(컬럼, 2) OVER(ORDER BY 정렬) -- 2행 후
LAG(컬럼) OVER(PARTITION BY 그룹 ORDER BY 정렬)
LEAD(컬럼) OVER(PARTITION BY 그룹 ORDER BY 정렬)
| 문제 | 점수 |
|---|---|
| 복습 1 | 95점 |
| 복습 2 (2일 전) | 100점 |
| 복습 3 (PARTITION BY) | 100점 |
| 문제 | 점수 |
|---|---|
| 복습 1 | 95점 |
| 복습 2~4 | 100점 |
| 복습 5 | 85점 |
| 복습 6 | 100점 |
총 11문제! 🔥
| 항목 | 상태 |
|---|---|
| JOIN + GROUP BY + HAVING | ✅ |
| LEFT JOIN + IS NULL | ✅ |
| ROW_NUMBER | ✅ |
| LAG | ✅ 완전 정복! |
| LEAD | ✅ 완전 정복! |
| 날짜 범위 | 🟡 연습 필요 |
📝 11문제 풀고 나니 LAG/LEAD 완전히 손에 익었다!
CTE 쓸 때 FROM 조심하자!
