[프로그래머스_MySQL]가격대 별 상품 개수 구하기(FLOOR vs ROUND)

hyeji·2023년 1월 5일
0
💡 PRODUCT테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

CASE WHEN 쓰는건가..?해서 그걸로 푸는데

SELECT CASE 
    WHEN PRICE<10000 THEN 0
    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
    ELSE 80000 END AS 'PRICE_GROUP', COUNT(*) AS 'PRODUCTS'
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC
;

쓰면서도 이게 아니란 걸 알겠다.

정답은 나오는데 가격대가 어디부터 어디까지 있는 지도 모르고, 저걸 하나하나 다 치는 게 좀 아니라는 생각이 들었지만 저거 말고는 방법이 생각 안 나서 일단 풀었다

(사실 처음엔 CASE WHEN을 GROUP BY 뒤에 씀ㅎ근데 오류떴다)

정답이라고 떴지만 앞으로 이런 문제를 저렇게 풀면 안 된다는 생각에 검색 좀 해봄

SELECT FLOOR(PRICE/10000)*10000 AS PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP;

FLOOR() 함수를 써서 정수값을 구해주고, 그 몫에 10000을 곱해주면 된다.

FLOOR(25.15)를 실행하면 25라는 결과값이 나옴

ROUND() 함수를 쓰면 안 되는 이유는 반올림을 하기 때문!!

이 문제에서는 2.99도 2로 표시되어야 하기 때문에 반올림을 하는 것이 아닌 버림을 해줘야 한다.

profile
Data Analyst

0개의 댓글