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원 사이의 가격대에 속한다.