
-- 내 코드: 모든 컬럼 다 씀
WITH cte_rn AS (
SELECT
d.id, d.name AS dept_name,
e.id, e.name AS employee_name,
e.deptId, e.salary,
ROW_NUMBER() OVER(...) AS rn_desc
FROM ...
)
-- 정답 코드: 필요한 것만!
WITH cte_rn AS (
SELECT
d.name AS dept_name,
e.name AS employee_name,
ROW_NUMBER() OVER(...) AS rn_desc
FROM ...
)
어떻게 거르면 좋을까?
"최종적으로 뭘 쓸 거야?"
SELECT dept_name, employee_name -- ← 여기서 뭘 써?
FROM cte_rn
WHERE rn_desc = 2 -- ← 여기서 뭘 써?
| 용도 | 포함 여부 |
|---|---|
| 최종 SELECT에서 출력할 컬럼 | ✅ 포함! |
| WHERE/HAVING에서 필터할 컬럼 | ✅ 포함! |
| ORDER BY에서 정렬할 컬럼 | ✅ 포함! |
| ROW_NUMBER의 PARTITION BY/ORDER BY | CTE 안에서만 씀 (밖에서 안 쓰면 제외 가능) |
| 그 외 나머지 | ❌ 안 써도 됨! |
SELECT dept_name, employee_name
WHERE rn_desc = 2
dept_name ← SELECT에 씀 ✅employee_name ← SELECT에 씀 ✅rn_desc ← WHERE에 씀 ✅d.id, e.id, e.deptId, e.salary ← 안 씀 ❌| 방식 | 장점 | 단점 |
|---|---|---|
| 모든 컬럼 다 쓰기 | 안전함, 빠르게 작성 | 불필요한 것 포함 |
| 필요한 것만 쓰기 | 깔끔! 실무에서 선호 | 생각 필요 |
시간이 중요하니까 일단 다 쓰고 돌려도 OK!
정답 맞으면 장땡! 🔥
필요한 컬럼만 쓰는 게 좋음
성능 + 가독성!
