Programmers/SQL

[mysql / oracle] 가격대 별 상품 개수 구하기

Anoi 2023. 2. 3. 20:31

문제

 

결과

 

mysql / oracle

1. case문 이용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SELECT (case 
            when price >= 0 and 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
            when price >= 80000 and price < 90000 then 80000 
       end) product_group, count(*) products
from product
group by (case 
            when price >= 0 and 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
            when price >= 80000 and price < 90000 then 80000 
       end)
order by product_group;
cs

group by

: case문으로 10000원부터 80000원까지 금액별로 그룹을 나누었다.

 

select

: case로 금액의 범위를 나누어 product_group이라는 칼럼명과 10000원부터 80000원까지의 칼럼값을 줬다.

: group by로 나누어진 그룹대로 count가 된다

 

 

2. floor

1
2
3
4
SELECT floor(price/10000)*10000 product_group, count(*) products
from product
group by floor(price/10000)*10000
order by product_group;
cs

나에게 필요한 것은 만원 단위의 가격대이다.

최댓값이 몇일지도 모르는데 case로 다 구분할 수는 없다.

 

그래서 자동으로 모든 값을 분류하기 위해서 floor를 썼다.

floor(price/10000) *10000

: price 칼럼에 해당되는 칼럼값들을 한 번씩 만으로 나누고 다시 만을 곱하면 해당되는 가격대가 나온다.

ex) 38000원이 있다고 하면 floor(38000/10000)으로 3.8에서 3으로 만들고 다시 10000을 곱하면 30000원에서 40000원 사이의 가격대에 속한다.