63. SQL - GROUP BY vs OVER(PARTITION BY) 헷갈림 방지!

Jason·2026년 2월 1일

SQL

목록 보기
46/47
post-thumbnail

SQL 내가 틀린 것들 #63 — GROUP BY vs OVER(PARTITION BY) 헷갈림 방지!


🤔 문제 상황

유저별 총 주문금액을 구하는데 또 OVER를 썼다...

-- ❌ 틀림!
SUM(amount) OVER(PARTITION BY user_id) AS total_amount

-- ✅ 정답!
SUM(amount) AS total_amount
...
GROUP BY user_id

같은 실수 반복 중! 😱


📌 핵심 질문

"행이 줄어들어?"

대답사용
YES (유저별 1줄씩)GROUP BY
NO (행 유지하면서 값 붙이기)OVER(PARTITION BY)

🔍 같은 데이터로 비교!

orders 테이블

iduser_idamount
110015000
210055000
3100120000
42008000

GROUP BY (행 줄어듦!)

SELECT user_id, SUM(amount) AS total
FROM orders
GROUP BY user_id
user_idtotal
100190000
2008000

3행 → 2행! (줄어듦!)


OVER(PARTITION BY) (행 유지!)

SELECT user_id, amount, SUM(amount) OVER(PARTITION BY user_id) AS total
FROM orders
user_idamounttotal
10015000190000
10055000190000
100120000190000
20080008000

4행 → 4행! (유지!)


⚠️ 내 반복 실수

문제실수정답
HAVING 문제COUNT(*) OVER 사용COUNT(*) + GROUP BY
모의고사 Q2SUM() OVER 사용SUM() + GROUP BY

둘 다 "유저별 1줄" 문제인데 OVER를 써버림!


🎯 판단법

문제 읽고 이렇게 판단하자!

1. "유저별 총 금액 구하라" → 유저당 1줄? → YES → GROUP BY!

2. "각 주문에 유저 총 금액을 붙여라" → 행 유지? → YES → OVER!


📌 정리

키워드사용
~별 집계 (합계, 평균, 건수)줄어듦GROUP BY
순위, 이전행, 누적합유지OVER()
각 행에 집계값 붙이기유지OVER(PARTITION BY)

"행 줄어들어?" YES면 GROUP BY! 💪

업로드중..

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

0개의 댓글