🔗 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 |