OkBublewrap

가격대 별 상품 개수 구하기 본문

개발/SQL

가격대 별 상품 개수 구하기

옥뽁뽁 2023. 2. 27. 16:56

<문제 설명>

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

Column nameTypeNullable
PRODUCT_ID INTEGER FALSE
PRODUCT_CODE VARCHAR(8) FALSE
PRICE INTEGER FALSE

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


문제

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


예시

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


PRODUCT_ID PRODUCT_CODE PRICE
1 A1000011 10000
2 A1000045 9000
3 C3000002 22000
4 C3000006 15000
5 C3000010 30000
6 K1000023 17000

만원 단위의 가격대 별로 상품을 나누면

  • 가격대가 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개,

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


PRICE_GROUP PRODUCTS
0 1
10000 3
20000 1
30000 1

 

<코드>

1) 처음에는 1차원적으로 생각을 했다. 예시 그대로 진행을 할려고 했다.

IF 문으로 나눠서 구간을 만들려고 했다.

SELECT IF(PRICE < 10000, 0, 
         IF(PRICE < 20000, 10000,
           IF(PRICE < 30000, 20000, 30000))) 
FROM PRODUCT

이런 식으로 진행을 할려고 했는데 오답 처리가 됬다. 문제를 보니 10000으로 구간을 나누라고 했다. 

 

2)  데이터 보기

SELECT PRICE
FROM PRODUCT 
ORDER BY 1 ASC
PRICE
15000
19000
21000
22000
31000
32000
35000
42000
42000
46000
46000
51000
51000
51000
54000
54000
55000
60000
60000
61000
62000
63000
65000
65000
72000
72000
80000
80000
82000
85000

10000 구간으로 나누면 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000이렇게 구간화가 진행이 되어야 한다.

 

SELECT LEFT(PRICE,1) * 10000, COUNT(*)
FROM PRODUCT 
GROUP BY 1
ORDER BY 1 ASC

앞부분 1자리를 가져온 다음 10000을 곱했고, 그룹핑 후 계산을 진행을 했다.