본문 바로가기
코딩테스트 리뷰

[프로그래머스] lev.2 가격대 별 상품 개수 구하기 (MYSQL)

by 바투바투 2023. 8. 1.
반응형

문제 설명

다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 정보를 담은 PRODUCT 테이블입니다. PRODUCT 테이블은 아래와 같은 구조로 되어있으며, PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다.

상품 별로 중복되지 않는 8자리 상품코드 값을 가지며 앞 2자리는 카테고리 코드를 나타냅니다.
문제

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


예시

예를 들어 PRODUCT 테이블이 다음과 같다면

만원 단위의 가격대 별로 상품을 나누면
  • 가격대가 0원 ~ 1만원 미만인 상품은 PRODUCT_ID 가 2인 상품 1개,
  • 가격대가 1만원 이상 ~ 2만원 미만인 상품들은 PRODUCT_ID 가 1, 4, 6인 상품 3개,
  • 가격대가 2만원 이상 ~ 3만원 미만인 상품은 PRODUCT_ID 가 3인 상품 1개,
  • 가격대가 3만원 이상 ~ 4만원 미만인 상품은 PRODUCT_ID 가 5인 상품 1개,

에 각각 해당하므로 다음과 같이 결과가 나와야 합니다.

 

문제풀이

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

 

FLOOR 함수에 대해서 사용방법을 몰랐는데 이번 알고리즘 문제를 통해서 알게 되었다.

보통은 이렇게 구간별로 컬럼값을 구분해야할 때 많이 쓰인다고 한다.

 

FLOOR(Numver)

숫자 값을 원래 값보다 작거나 같은 가장 가까운 정수로 내림하는데 사용되는 함수.

 

위의 문제에서는 FLOOR(PRICE / 10000) * 10000 을 하여 정수로 나눈 값을 가장 가까운 정수로 내림하게 된다.

1. PRICE/10000 : 'PRICE' 열을 10,000으로 나눈 값을 계산하게 된다. 예를 들어 'PRICE'가 27,000이면 결과값은 2.7이 된다.

2. FLOOR(PRICE/10000) : FLOOR 함수는 1단계 결과에서 소수점 값을 가장 가까운 정수로 내림한다. 그러면 위의 예에서는 2가 된다.

3. FLLOR(PRICE/10000)*10000 : 마지막으로 2의 결과에 10,000을 곱한다. 이는 가격을 해당 가격범위의 하한으로 설정하게 한다. 결과값은 위의 예에서 2*10,000 = 20,000이 된다.

 

이렇게하면 기본적으로 제품을 최솟값에서 시작하여(0~10,000, 10,000~20,000, 20,000~30,000 등) 각 가격별로 10,000단위로 범주를 그룹화 할 수 있다.

 

유용한 함수이니 잘 알아둬야지!

반응형
LIST