본문 바로가기
문제 풀이/프로그래머스

[MYSQL 21] 가격대 별 상품 개수 구하기

by hyeminigo 2024. 9. 20.

가격대 별 상품 개수 구하기 (LEVEL2)

레벨 치고는 어려웠던 문제

 

 

PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력

컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정

가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요.

정렬은 가격 오름차순

 


정답 코드

SELECT CASE WHEN (0 < PRICE) AND (PRICE < 10000) then 0
             WHEN (10000 <= PRICE) and (PRICE < 20000) then 10000
             WHEN (20000 <= PRICE) and (PRICE < 30000) then 20000
             WHEN (30000 <= PRICE) and (PRICE < 40000) then 30000
             WHEN (40000 <= PRICE) and (PRICE < 50000) then 40000
             WHEN (50000 <= PRICE) and (PRICE < 60000) then 50000
             WHEN (60000 <= PRICE) and (PRICE < 70000) then 60000
             WHEN (70000 <= PRICE) and (PRICE < 80000) then 70000
             WHEN (80000 <= PRICE) and (PRICE < 90000) then 80000
             END AS PRICE_GROUP, count(*) AS PRODUCTS
FROM  PRODUCT 
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC

 

 

다른 정답 코드

SELECT PRICE_GROUP, count(PRODUCT_ID) AS PRODUCTS
FROM (SELECT PRODUCT_ID, PRICE, truncate(PRICE, -4) AS PRICE_GROUP
        FROM PRODUCT) as a
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
SELECT (CASE
            WHEN PRICE < 10000 THEN 0
            ELSE TRUNCATE(PRICE, -4)
       END) AS PRICE_GROUP, COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP
SELECT FLOOR(PRICE/10000)*10000 AS PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM product
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC

 

 

MEMO

  • SELECT 에서 사용한 별칭을 GROUP BY 에서 사용할 수 있다.
  • GROUP BY 이후에 SELECT 이 실행된다. (SELECT 에서 계산하는 건 맞지만 실행되는 건 아니다. 실행과 계산 개념이 분리되나 보다)
  • TRUNCATE(숫자, 버릴 수) : 자리수 이하 버림 ex) TRUNCATE(15000, -4) = 10000
  • FLOOR(숫자) : 소수점 제거 ex) FLOOR(2.5) = 2