Git & SQL/SQL 실습

🔥 SQL Pivot: 왜 MAX를 써야 할까? | SQL 탐구생활

THINKRUNNER 2025. 5. 5. 21:07
🔥 SQL Pivot: 왜 MAX를 써야 할까? | 친절한 SQL 탐구생활

🔥 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이 나올 수 있어요.

🔍 GROUP BY가 문제의 근원?

맞아요. GROUP BY는 학생마다 하나의 행만 남겨야 하기 때문에, 내부적으로 CASE WHEN의 NULL들이 무시되지 않으면 엉뚱한 결과가 나오는 거예요.

🧠 정리하며

  • Pivot은 CASE WHEN + 집계함수(MAX)를 써야 제대로 동작해요.
  • GROUP BY는 "누구 당 한 줄"만 남기기 때문에 똑똑한 대표를 뽑아줘야 해요.
  • MAX는 그 역할을 잘 해주는 대표 선출 도우미!

처음엔 당황스러울 수 있지만, 개념을 잡고 나면 pivot은 꽤 재밌는 기술이랍니다. 다음엔 동적 pivot도 도전해보려고요! 🚀

📝 간단 정리 표

상황 GROUP BY 필요? MAX 필요? 이유
학생이 여러 명 ✅ 필요 ✅ 필요 각 그룹에서 값을 뽑아야 하니까
학생이 1명 ❌ 불필요 ✅ 필요 여러 줄에서 값 하나로 요약 필요

🧠 생각해볼 문제

다음 중 SQL에서 MAX()를 꼭 써야 하는 상황은?

  1. 학생이 한 명이고 점수도 한 줄만 있을 때
  2. 학생이 여러 명이고 과목별 점수가 여러 줄씩 있을 때
  3. 학생이 한 명이고 점수가 NULL인 행만 있을 때
  4. 학생이 여러 명이지만 점수가 항상 1줄씩만 있는 경우
✅ 정답 보기

정답: 2번
여러 명이 있을 때, 과목별 점수가 여러 줄이라면 NULL을 걸러내고 유효한 값을 뽑기 위해 반드시 MAX 같은 집계 함수가 필요합니다.