본문 바로가기

코딩테스트/SQL

가격대 별 상품 개수 구하기

이 문제는 가격대를 그룹화하고, 각 그룹에 속하는 상품의 개수를 계산하는 작업입니다. SQL에서 GROUP BYCASE문 또는 수학적인 계산을 활용하여 해결할 수 있습니다.

접근 방법

  1. 가격대 구하기 (PRICE_GROUP)
    • 가격대를 구간으로 나누기 위해, FLOOR 함수나 단순 계산을 사용하여 10,000 단위의 최솟값을 구합니다.
    • 예를 들어, PRICE가 12,000이라면, 10,000 단위의 최솟값은 10,000입니다.
    • FLOOR(PRICE / 10000) * 10000
    여기서:
    • PRICE / 10000은 가격을 10,000 단위로 나눈 몫을 구합니다.
    • FLOOR는 소수점을 버리고 정수 값으로 내림합니다.
    • * 10000은 다시 10,000 단위로 변환합니다.
  2. 그룹화 및 상품 개수 계산
    • 위에서 계산한 가격대를 기준으로 GROUP BY를 사용하여 각 가격대에 해당하는 상품의 개수를 계산합니다.
  3. 컬럼명 설정 및 정렬
    • 결과 컬럼명을 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

설명

  1. FLOOR(PRICE / 10000) * 10000은 각 상품을 해당하는 10,000 단위로 매핑합니다.
    • 9000 → 0
    • 10000 → 10000
    • 15000 → 10000
    • 22000 → 20000
    • 30000 → 30000
  2. COUNT(*)는 각 가격대(PRICE_GROUP)에 해당하는 상품 개수를 계산합니다.
  3. ORDER BY PRICE_GROUP으로 결과를 가격대 순서대로 정렬합니다.