48. SQL - CTE에 어떤 컬럼을 넣을까?

Jason·2026년 1월 24일

SQL

목록 보기
33/47

SQL 내가 틀린 것들 #48 — CTE에 어떤 컬럼을 넣을까?

🤔 궁금했던 것

-- 내 코드: 모든 컬럼 다 씀
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                -- ← 여기서 뭘 써?

✅ CTE에 포함해야 할 것

용도포함 여부
최종 SELECT에서 출력할 컬럼✅ 포함!
WHERE/HAVING에서 필터할 컬럼✅ 포함!
ORDER BY에서 정렬할 컬럼✅ 포함!
ROW_NUMBER의 PARTITION BY/ORDER BYCTE 안에서만 씀 (밖에서 안 쓰면 제외 가능)
그 외 나머지❌ 안 써도 됨!

📊 예시

문제 요구사항:

  • 부서 이름
  • 두 번째 고연봉자 이름

최종 SELECT:

SELECT dept_name, employee_name
WHERE rn_desc = 2

CTE에 필요한 컬럼:

  • dept_name ← SELECT에 씀 ✅
  • employee_name ← SELECT에 씀 ✅
  • rn_desc ← WHERE에 씀 ✅
  • d.id, e.id, e.deptId, e.salary ← 안 씀 ❌

🔥 두 가지 방식 비교

방식장점단점
모든 컬럼 다 쓰기안전함, 빠르게 작성불필요한 것 포함
필요한 것만 쓰기깔끔! 실무에서 선호생각 필요

💡 코테 vs 실무

코테에서는:

시간이 중요하니까 일단 다 쓰고 돌려도 OK!

정답 맞으면 장땡! 🔥

실무에서는:

필요한 컬럼만 쓰는 게 좋음

성능 + 가독성!


📌 정리

  1. 최종 SELECT/WHERE/ORDER BY 확인
  2. 거기서 쓰는 컬럼만 CTE에 포함
  3. 코테에서는 일단 다 써도 OK! 나중에 최적화!

profile
Data Analyst | Thoughts Become Things. 할 수 있다고 생각하면 할 수 있다. 할 수 없다고 생각하면 할 수 없다. | www.linkedin.com/in/명수-제-7ab843200

0개의 댓글