[프로그래머스 LV.2] 가격대 별 상품 개수 구하기 — MySQL 정답 & 해설

2025. 12. 8. 16:38·코딩테스트/MYSQL

🔗 1. 문제 URL

https://school.programmers.co.kr/learn/courses/30/lessons/131530

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


 

📝 2. 문제 요구사항 정리

  • PRODUCT 테이블에서 판매가(PRICE) 를 기준으로
    만원 단위(10,000원 단위) 가격대 별 상품 개수를 구하는 문제
  • 가격대는 각 구간의 최소 금액으로 표시해야 합니다.
    • 예) 10,000원 이상 ~ 20,000원 미만 → 가격대는 10,000
  • 출력 컬럼명은
    • PRICE_GROUP
    • PRODUCTS(상품 개수)
  • 결과는 가격대 오름차순으로 정렬.

즉, PRICE가

  • 0 ~ 9,999 → 0
  • 10,000 ~ 19,999 → 10,000
  • 20,000 ~ 29,999 → 20,000
    이렇게 잘려서 계산되도록 해야합니다.

 


 

💡 3. 핵심 개념

✔ 1) 가격대를 만드는 방식

만원 단위로 “버림”해야 하므로 다음 두 방법 중 하나를 사용할 수 있습니다.

  • FLOOR(PRICE / 10000) * 10000
  • TRUNCATE(PRICE, -4) (MySQL 전용)

문제에서는 FLOOR 방식이 널리 쓰이고 직관적이라 선택하였습니다. (사실 TRUNCATE 생각을 못했어요)

✔ 2) GROUP BY에서 같은 식을 반복

FLOOR 식을 SELECT에서 alias로 사용했고
MySQL 한정, GROUP BY에 alias를 그대로 써도 되는것을 지난 포스팅에서도 다뤘지만,
여기서는 문제 정석답안 스타일을 따르기 위해 식을 그대로 그룹화에 사용.

 


 

✅ 4. 정답 SQL 코드

 
SELECT FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP
	, COUNT(PRODUCT_CODE) AS PRODUCTS
FROM PRODUCT
GROUP BY FLOOR(PRICE / 10000) * 10000
ORDER BY PRICE_GROUP ASC;

-- 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성
-- 결과는 가격대를 기준으로 오름차순 정렬

 


 

💬 5. 풀이하면서 느낀 점

이번 문제는 가격 데이터를 특정 단위로 버림(FLOOR) 해서
그 값을 기준으로 그룹화하는 좋은 연습 문제였습니다.

단순히 GROUP BY만 쓰는 문제처럼 보이지만,

  • 어떤 단위로 가격대를 나눌지,
  • FLOOR와 TRUNCATE의 차이,
  • 구간의 ‘최소 금액’을 어떻게 표현할지
    이런 부분들을 직접 고민해보는 과정이 꽤 도움이 됐다.

특히 MySQL에서는 GROUP BY에 alias를 사용할 수 있어서
코드를 더 깔끔하게 작성할 수 있다는 점도 다시 한번 기억났었습니다.


처음 FLOOR을 사용하는 문제를 풀어봤는데 구간별 통계에서 자주 쓰이는 패턴이라고 하니
다음에 비슷한 문제를 만났을 때 훨씬 빠르게 접근할 수 있기를 !

 

궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.
도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊

'코딩테스트 > MYSQL' 카테고리의 다른 글

[프로그래머스 LV.3] 대장균들의 자식의 수 구하기 — MySQL 정답 & 해설  (0) 2025.12.08
[프로그래머스 LV.2] 상품 별 오프라인 매출 구하기 — MySQL 정답 & 해설  (0) 2025.12.08
[프로그래머스 LV.2] 분기별 분화된 대장균의 개체 수 구하기 — MySQL 정답 & 해설  (0) 2025.12.03
[프로그래머스 LV.2] 재구매가 일어난 상품과 회원 리스트 구하기 — MySQL 정답 & 해설  (0) 2025.12.03
[프로그래머스 LV.2] 성분으로 구분한 아이스크림 총 주문량 — MySQL 정답 & 해설  (0) 2025.12.01
'코딩테스트/MYSQL' 카테고리의 다른 글
  • [프로그래머스 LV.3] 대장균들의 자식의 수 구하기 — MySQL 정답 & 해설
  • [프로그래머스 LV.2] 상품 별 오프라인 매출 구하기 — MySQL 정답 & 해설
  • [프로그래머스 LV.2] 분기별 분화된 대장균의 개체 수 구하기 — MySQL 정답 & 해설
  • [프로그래머스 LV.2] 재구매가 일어난 상품과 회원 리스트 구하기 — MySQL 정답 & 해설
작지만 꾸준한 성장으로
작지만 꾸준한 성장으로
contact
  • 작지만 꾸준한 성장으로
    파랑새
    작지만 꾸준한 성장으로
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • IT (3)
      • 코딩테스트 (23)
        • 알고리즘 (12)
        • MYSQL (11)
      • 패션 (0)
      • 독후감 (0)
      • TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    파이썬코테
    알고리즘
    공공데이터 전처리
    I/O Bound
    프로그래머스
    자바
    코딩테스트
    프로그래머스 lv.1
    Programmers
    python3
    프로그래머스 lv.0
    mysql
    wide format
    모델 추론
    sql 코딩테스트
    Pandas groupby agg
    long format
    CPU Bound
    데이터 전처리 파이프라인
    프로그래머스 lv.2
    백준
    코테
    Python
    Pandas pivot
    데이터베이스
    데이터 리모델링
    Pandas melt
    SWEA
    와이드 포맷 롱 포맷
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
작지만 꾸준한 성장으로
[프로그래머스 LV.2] 가격대 별 상품 개수 구하기 — MySQL 정답 & 해설
상단으로

티스토리툴바