🔓 문제 설명
어느 의류 쇼핑몰의 상품 정보를 담고 있는 PRODUCT 테이블이 있습니다.
각 상품은 고유한 상품 코드와 판매 가격을 가지고 있으며, 우리는 만원 단위로 가격대 그룹을 나누어 각 그룹에 해당하는 상품 개수를 출력해야 합니다.
예를 들어, 9,000원은 0원~1만원 미만, 22,000원은 2만원~3만원 미만 구간에 속하게 됩니다.
- PRODUCT 테이블
Column name | Type | Nullable |
PRODUCT_ID | INTEGER | FALSE |
PRODUCT_CODE | VARCHAR(8) | FALSE |
PRICE | INTEGER | FALSE |
(문제출처:https://school.programmers.co.kr/learn/courses/30/lessons/131530?language=mysql)
🎯 입출력 예제
- PRODUCT 테이블:
PRODUCT_ID | PRODUCT_CODE | PRICE |
1 | A1000011 | 10000 |
2 | A1000045 | 9000 |
3 | C3000002 | 22000 |
4 | C3000006 | 15000 |
5 | C3000010 | 30000 |
6 | K1000023 | 17000 |
만원 단위의 가격대 별로 상품을 나누면
가격대가 0원 ~ 1만원 미만인 상품은 PRODUCT_ID 가 2인 상품 1개,
가격대가 1만원 이상 ~ 2만원 미만인 상품들은 PRODUCT_ID 가 1, 4, 6인 상품 3개,
가격대가 2만원 이상 ~ 3만원 미만인 상품은 PRODUCT_ID 가 3인 상품 1개,
가격대가 3만원 이상 ~ 4만원 미만인 상품은 PRODUCT_ID 가 5인 상품 1개
각각 해당하므로 다음과 같이 결과가 나와야 합니다.
PRICE_GROUP | PRODUCTS |
0 | 1 |
10000 | 3 |
20000 | 1 |
30000 | 1 |
🏆 핵심 포인트
✅ 금액대 별 가격을 하한선부터 상한선까지 변환
📝 코드 구현
-- 가격을 만원 단위로 나눈 그룹별로 상품 개수를 구하는 쿼리
SELECT
FLOOR(PRICE/10000) * 10000 AS PRICE_GROUP, -- 가격을 만원 단위 하한값으로 변환 (예: 17000 → 10000)
COUNT(*) AS PRODUCTS -- 각 가격 그룹에 해당하는 상품 개수 집계
FROM PRODUCT
GROUP BY FLOOR(PRICE/10000) * 10000 -- 동일한 가격대(만원 단위)로 그룹핑
ORDER BY 1 -- PRICE_GROUP 기준으로 오름차순 정렬
🔥 인사이트
🔹 FLOOR() 함수는 범위 기반 그룹핑 문제에서도 유용
FLOOR(컬럼/기준단위)*기준단위