본문 바로가기
DB_이야기

🚀[SQL 알고리즘 문제 풀이] Programmers : 가격대 별 상품 개수 구하기 (with FLOOR())

by gwon_s 2025. 5. 5.

🔓 문제 설명

 

어느 의류 쇼핑몰의 상품 정보를 담고 있는 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(컬럼/기준단위)*기준단위