51. SQL - UNION ALL + ORDER BY 정렬하기

Jason·2026년 1월 24일

SQL

목록 보기
34/47

SQL 내가 틀린 것들 #51 — UNION ALL + ORDER BY 정렬하기

🤔 궁금했던 것

UNION ALL로 두 쿼리 합친 후에 전체를 정렬하고 싶은데, 어떻게 해?


✅ 정답: 맨 마지막에 ORDER BY!

SELECT mother.name, MAX(child.birth_year) AS birth_year
FROM people mother
JOIN people child ON mother.id = child.mother_id
GROUP BY mother.id, mother.name

UNION ALL

SELECT father.name, MAX(child.birth_year) AS birth_year
FROM people father
JOIN people child ON father.id = child.father_id
GROUP BY father.id, father.name

ORDER BY name  -- ← 맨 마지막에 한 번만!

괄호 없어도 돼! 맨 끝에 붙이면 전체 결과에 적용됨!


💡 ORDER BY 위치별 동작

위치동작
각 SELECT 안에 ORDER BY❌ UNION에서 무시됨!
맨 마지막에 ORDER BY전체 결과에 적용!

❌ 이렇게 하면 안 돼!

-- 각각 ORDER BY 넣으면?
SELECT name, birth_year FROM ... ORDER BY name  -- ← 무시됨!
UNION ALL
SELECT name, birth_year FROM ... ORDER BY name  -- ← 무시됨!

UNION이 합치면서 개별 ORDER BY는 무시해버려!


✅ 이렇게 해야 돼!

SELECT name, birth_year FROM ...
UNION ALL
SELECT name, birth_year FROM ...
ORDER BY name  -- ← 여기서 한 번만!

📊 시각화

UNION ALL 결과 (정렬 전):
| name | birth_year |
|------|------------|
| 영숙 | 1990 |
| 철수 | 1990 |
| 미영 | 1992 |
| 동수 | 1992 |

ORDER BY name 적용 후:
| name | birth_year |
|------|------------|
| 동수 | 1992 |
| 미영 | 1992 |
| 영숙 | 1990 |
| 철수 | 1990 |

전체가 name 기준으로 정렬됨!


📌 정리

UNION / UNION ALL 쓸 때:

ORDER BY는 맨 마지막에 한 번만!

그러면 합쳐진 전체 결과를 정렬해줘! 🔥

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

0개의 댓글