코딩테스트/SQL

[프로그래머스][MySQL] Lv. 2 가격대 별 상품 개수 구하기

_알파카 2024. 8. 13. 18:27
728x90

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/131530

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

가격대 별 상품 개수를 구하는 문제이다. 

 

내 풀이

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