Allen's 데이터 맛집
SQL : 가격대 별 상품 개수 구하기 - CASE 대신 TRUNCATE 본문
가격대 별 상품 개수 구하기
위와 같은 문제에서 당연히 CASE문을 사용했지만 만약에 해당 PRICE값들의 범주가 많다면 일일이 전부 쳐야 하는 번거로움이 있습니다.
CASE 문 사용
SELECT
CASE
WHEN price >= 10000 AND price < 20000 THEN 10000
WHEN price >= 20000 AND price < 30000 THEN 20000
WHEN price >= 30000 AND price < 40000 THEN 30000
WHEN price >= 40000 AND price < 50000 THEN 40000
WHEN price >= 50000 AND price < 60000 THEN 50000
WHEN price >= 60000 AND price < 70000 THEN 60000
WHEN price >= 70000 AND price < 80000 THEN 70000
WHEN price >= 80000 AND price < 90000 THEN 80000
END AS PRICE_GROUP
,COUNT(product_id) AS PRODUCTS
FROM PRODUCT
GROUP BY 1
ORDER BY 1
TRUNCATE 사용
이렇게 TRUNCATE(버림)을 사용하여 가격을 만 단위로 나눈 후 소수점 이하를 제거하고, 그 결과를 다시 만으로 곱하여 가격을 만 단위로 그룹화한다면 범주가 얼마나 길든 짧은 쿼리로 완성시킬 수 있습니다.
SELECT
TRUNCATE((price / 10000),0) * 10000 AS PRICE_GROUP,
COUNT(PRODUCT_ID) AS PRODUCTS
FROM
PRODUCT
GROUP BY
PRICE_GROUP
ORDER BY
PRICE_GROUP ASC
결과:
https://school.programmers.co.kr/learn/courses/30/lessons/131530