이 문제는 가격대를 그룹화하고, 각 그룹에 속하는 상품의 개수를 계산하는 작업입니다. SQL에서 GROUP BY와 CASE문 또는 수학적인 계산을 활용하여 해결할 수 있습니다.
접근 방법
- 가격대 구하기 (PRICE_GROUP)
- 가격대를 구간으로 나누기 위해, FLOOR 함수나 단순 계산을 사용하여 10,000 단위의 최솟값을 구합니다.
- 예를 들어, PRICE가 12,000이라면, 10,000 단위의 최솟값은 10,000입니다.
- FLOOR(PRICE / 10000) * 10000
- PRICE / 10000은 가격을 10,000 단위로 나눈 몫을 구합니다.
- FLOOR는 소수점을 버리고 정수 값으로 내림합니다.
- * 10000은 다시 10,000 단위로 변환합니다.
- 그룹화 및 상품 개수 계산
- 위에서 계산한 가격대를 기준으로 GROUP BY를 사용하여 각 가격대에 해당하는 상품의 개수를 계산합니다.
- 컬럼명 설정 및 정렬
- 결과 컬럼명을 PRICE_GROUP, PRODUCTS로 설정합니다.
- 가격대(PRICE_GROUP)를 기준으로 오름차순으로 정렬합니다.
최종 SQL 쿼리
SELECT
FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP, -- 10,000 단위의 최소 금액
COUNT(*) AS PRODUCTS -- 각 그룹의 상품 개수
FROM PRODUCT
GROUP BY FLOOR(PRICE / 10000) * 10000 -- 10,000 단위로 그룹화
ORDER BY PRICE_GROUP; -- 가격대를 기준으로 정렬
쿼리 실행 결과 예시
테이블 데이터 : PRODUCT_IDPRODUCT_CODEPRICE
1 | A1000011 | 10000 |
2 | A1000045 | 9000 |
3 | C3000002 | 22000 |
4 | C3000006 | 15000 |
5 | C3000010 | 30000 |
6 | K1000023 | 17000 |
쿼리 결과 : PRICE_GROUPPRODUCTS
0 | 1 |
10000 | 3 |
20000 | 1 |
30000 | 1 |
설명
- FLOOR(PRICE / 10000) * 10000은 각 상품을 해당하는 10,000 단위로 매핑합니다.
- 9000 → 0
- 10000 → 10000
- 15000 → 10000
- 22000 → 20000
- 30000 → 30000
- COUNT(*)는 각 가격대(PRICE_GROUP)에 해당하는 상품 개수를 계산합니다.
- ORDER BY PRICE_GROUP으로 결과를 가격대 순서대로 정렬합니다.
'코딩테스트 > SQL' 카테고리의 다른 글
대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2024.11.26 |
---|