
WITH cte_rn AS (
SELECT
p.customer_id,
DATE_FORMAT(p.purchased_at, "%Y-%m-%d") AS purchased_at,
ROW_NUMBER() OVER(PARTITION BY p.customer_id ORDER BY p.purchased_at DESC) AS rn_desc,
COUNT(*) OVER(PARTITION BY p.customer_id) AS purchase_count
FROM purchases p
)
...
이거 p. 빼도 되나? 🤔
WITH cte_rn AS (
SELECT
customer_id, -- ✅ p. 없어도 OK!
DATE_FORMAT(purchased_at, "%Y-%m-%d") AS purchased_at,
ROW_NUMBER() OVER(PARTITION BY customer_id ORDER BY purchased_at DESC) AS rn_desc,
COUNT(*) OVER(PARTITION BY customer_id) AS purchase_count
FROM purchases
)
...
테이블이 1개뿐이면 어디서 온 컬럼인지 명확하니까!
SELECT
customer_id, -- ❌ 어느 테이블? 에러 가능!
name
FROM customers c
JOIN orders o ON c.id = o.customer_id
SELECT
c.customer_id, -- ✅ 명확!
c.name
FROM customers c
JOIN orders o ON c.id = o.customer_id
같은 컬럼명이 여러 테이블에 있으면 반드시 명시!
| 상황 | 별칭 생략 |
|---|---|
| 테이블 1개 | ✅ OK |
| 테이블 2개 이상 (JOIN) | ⚠️ 웬만하면 명시! |
| 같은 컬럼명이 여러 테이블에 | ❌ 반드시 명시! |
테이블 1개 →
p.생략 가능!테이블 2개 이상 → 명시하는 습관!
헷갈리면 그냥 항상 별칭 붙이자!
-- 이렇게 하면 실수 없음
p.customer_id
p.purchased_at
명확한 게 최고다! 💪
