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

풀이
case when
을 사용하여 모든 조건으로 검색을 하였다. 아래 소스코드도 정답이긴 하지만, 만약 가격대가 99999까지만 있는게 아니고 수 없이 많았더라면 쿼리는 점점 늘어날것이다. 그래서 검색하여 다른 좋은 query가 있나? 찾아보았다. -- 코드를 입력하세요
SELECT
case
when price between 0 and 9999 then "0"
when price between 10000 and 19999 then "10000"
when price between 20000 and 29999 then "20000"
when price between 30000 and 39999 then "30000"
when price between 40000 and 49999 then "40000"
when price between 50000 and 59999 then "50000"
when price between 60000 and 69999 then "60000"
when price between 70000 and 79999 then "70000"
when price between 80000 and 89999 then "80000"
when price between 90000 and 99999 then "90000"
else "있나?"
end PRICE_GROUP,
count(*)
from PRODUCT
group by PRICE_GROUP
order by PRICE_GROUP
검색 결과 아래 코드는
price
를 10000으로 나누어서 소수점을 버리는 query
이다. 이 경우에는 아무리 많은 가격대가 있거나, 가격대가 추가 되어도 추가로 query
를 수정하지 않아도 된다. select
floor(PRICE/10000) * 10000 as PRICE_GROUP,
count(*) as PRODUCTS
from PRODUCT
group by PRICE_GROUP
order by PRICE_GROUP;
Share article