어제 프로젝트 중간보고서 작성으로 저녁 늦게서야 mySQL 미션 문제를 풀이했다 ... (업로드가 된 줄 아랐지만 안된걸 늦게 봤다)
[문제] 가격대 별 상품 개수 구하기 (25분)
PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.
https://school.programmers.co.kr/learn/courses/30/lessons/131530
[문제풀이]
문제의 목표는 가격대 정보를 구간별로 나누는 내용이었다. PRODUCT 테이블 내용은 아래와 같다
| Column name | Type | Nullable |
| PRODUCT_ID | INTEGER | FALSE |
| PRODUCT_CODE | VARCHAR(8) | FALSE |
| PRICE | INTEGER | FALSE |
price_group(가격대)의 구간을 정해야하는데 계산하는 것은 case when을 사용해야 할 것 같아, 아래와 같이 풀었다.
(그런데 막상 쓰려니 너무 귀찮기도 했고, 번거로웠다 ㅠㅠ)
전체 개수를 구할 수 있도록 count(*) 하고 products를 지정하였다.
그 다음, 조건문에 맞게 group by를 이용하고 , 가격대를 기준으로 오름차순 정렬을 위해 order by를 추가하였다.
SELECT case when (0 <= price) and (price < 10000) then 0
when (10000 <= price) and (price < 20000) then 10000
when (20000 <= price) and (price < 30000) then 20000
when (30000 <= price) and (price < 40000) then 30000
when (40000 <= price) and (price < 50000) then 40000
when (50000 <= price) and (price < 60000) then 50000
when (60000 <= price) and (price < 70000) then 60000
when (70000 <= price) and (price < 80000) then 70000
when (80000 <= price) and (price < 90000) then 80000
when (90000 <= price) and (price < 100000) then 90000
end as price_group , count(*) as PRODUCTS
FROM PRODUCT
group by PRICE_GROUP
order by PRICE_GROUP asc;
그런데 이렇게 가격대가 다양하다면, Case when으로 찾기 너무 귀찮지 않을까...?

궁금해서 구글링을 찾아보니 요런 방법도 있었다. 'PRICE' 컬럼의 값을 10000으로 나누고나서, 'FLOOR()' 함수를 이용해서 소수점을 제거 및 10000을 곱하여 값을 산출한다음 해당 값을 가진 컬럼명을 'PRICE_GROUP'으로 나타나도록 변경하는 방법이었다.. 처음 안 내용이었으니, 다시 한 번 복기를 해봐야겠다.
SELECT
FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP'스터디 > 학습일지' 카테고리의 다른 글
| [SQL] 코드카타 풀이 Employees Whose Manager Left the Company (0) | 2025.06.20 |
|---|---|
| [SQL] 20250619- mySQL 문제 풀이 미션 (1) (0) | 2025.06.19 |
| [SQL] 250618 코드카타 문제풀이 Leetcode 1204 (0) | 2025.06.18 |
| [SQL] 20250616- mySQL 문제 풀이 미션 (2) (1) | 2025.06.16 |
| [SQL] 20250616- mySQL 문제 풀이 미션 (1) (3) | 2025.06.16 |