🔥 SQL Pivot: 왜 MAX를 써야 할까?
안녕하세요! 오늘은 SQL 문제를 풀면서 등장한 Pivot 개념과, 왜 꼭 MAX를 써야 하는지에 대한 궁금증을 풀어보려 해요. 저 처럼 Pivot을 처음 접했다면 당황할 수도 있지만, 하나하나 풀어가면서 확실히 이해해봅시다. 😊
📌 Pivot이 뭐지?
Pivot은 행(Row)에 있는 데이터를 열(Column)로 돌리는 작업이에요. 예를 들어 과목별 점수를 학생별로 한 줄로 보고 싶을 때 사용해요.
🎭 CASE WHEN으로 열 바꾸기
SELECT student_id,
CASE WHEN subject = 'English' THEN grade END AS english,
CASE WHEN subject = 'Math' THEN grade END AS math,
CASE WHEN subject = 'Science' THEN grade END AS science
FROM Students;
이렇게 하면 각 과목별 점수를 컬럼으로 바꾸는 것처럼 보여요. 하지만 여기서 문제가 생깁니다...
🤔 왜 꼭 MAX가 필요할까?
위처럼 CASE WHEN만 쓰면, 해당 과목이 아닌 행은 NULL이 들어가요. 그리고 GROUP BY를 하면 여러 행을 하나로 줄이는데, 어떤 값을 대표로 쓸지 모르면 NULL이 나와버려요!
SELECT student_id,
MAX(CASE WHEN subject = 'English' THEN grade END) AS english,
MAX(CASE WHEN subject = 'Math' THEN grade END) AS math,
MAX(CASE WHEN subject = 'Science' THEN grade END) AS science
FROM Students
GROUP BY student_id;
MAX()는 NULL을 무시하고 살아있는 값을 뽑아줘요! 이게 바로 핵심이에요. 💡
✅ MAX()는 살아 있는 값을 뽑기 위해서 꼭 필요해요.
✅ NULL이 섞이면 MAX가 없을 땐 결과가 이상하거나 NULL이 나올 수 있어요.
✅ NULL이 섞이면 MAX가 없을 땐 결과가 이상하거나 NULL이 나올 수 있어요.
🔍 GROUP BY가 문제의 근원?
맞아요. GROUP BY는 학생마다 하나의 행만 남겨야 하기 때문에, 내부적으로 CASE WHEN의 NULL들이 무시되지 않으면 엉뚱한 결과가 나오는 거예요.
🧠 정리하며
- Pivot은 CASE WHEN + 집계함수(MAX)를 써야 제대로 동작해요.
- GROUP BY는 "누구 당 한 줄"만 남기기 때문에 똑똑한 대표를 뽑아줘야 해요.
- MAX는 그 역할을 잘 해주는 대표 선출 도우미!
처음엔 당황스러울 수 있지만, 개념을 잡고 나면 pivot은 꽤 재밌는 기술이랍니다. 다음엔 동적 pivot도 도전해보려고요! 🚀