코딩테스트/SQL
[프로그래머스][MySQL] Lv. 2 가격대 별 상품 개수 구하기
_알파카
2024. 8. 13. 18:27
728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/131530
가격대 별 상품 개수를 구하는 문제이다.
내 풀이
SELECT (FLOOR(PRICE / 10000) * 10000) AS PRICE_GROUP
, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY FLOOR(PRICE / 10000) * 10000
ORDER BY FLOOR(PRICE / 10000) * 10000;
어렵지는 않지만, FLOOR 함수를 모르면 풀지 못하는 문제이다.
FLOOR 함수는 숫자의 소수점을 모두 버려주는 함수이다.
즉, 12.345 라는 숫자가 있으면, FLOOR(12.345) = 12가 된다.
따라서, 주어진 금액을 10000으로 나눠
22000 -> 2.2000 으로 변경한 후
FLOOR(2.2) -> 2로 변경하고,
2 * 10000 -> 20000으로 변경하여
문제에서 주어진 형식을 만들어낸다.
다른 사람 풀이
SELECT TRUNCATE(PRICE, -4) AS PRICE_GROUP
, COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY FLOOR(PRICE / 10000) * 10000
ORDER BY FLOOR(PRICE / 10000) * 10000;
FLOOR 함수 대신 TRUNCATE 함수를 사용할 수도 있다.
TRUNCATE는 일반적으로 테이블을 삭제할 때 사용하는 명령어이다.
TRUNCATE TABLE table_name;
위와 같이 실행하게 되면 테이블의 모든 데이터를 한 번에 지울 수 있다.
또한, TRUNCATE는 숫자를 버릴 때에도 사용할 수 있다.
SELECT TRUNCATE(3456.1234567 ,1)
FROM DUAL;
// 3456.1
SELECT TRUNCATE(3456.1234567 ,4)
FROM DUAL;
// 3456.1234
SELECT TRUNCATE(3456.1234567 ,-1)
FROM DUAL;
// 3450
SELECT TRUNCATE(3456.1234567 ,-2)
FROM DUAL;
// 3400
위와 같이 숫자와 버릴 자리 수를 명시해주면, 그 자릿수 아래로는 숫자를 버리게 되는 것이다.
문제에 적용해보면, TRUNCATE(PRICE, -4)를 하면 뒤의 4자리는 0이 된다.
즉, 54000원이라는 값이 있을 때, TRUNCATE(PRICE, -4)를 실행하면
54000 -> 50000이 되는 것이다.
728x90