SQL

[SQL/solvesql] LV3. 지역별 주문의 특징

jy9892 2025. 1. 9. 22:00
반응형

https://solvesql.com/problems/characteristics-of-orders/

 

https://solvesql.com/problems/characteristics-of-orders/

 

solvesql.com

1. 문제 상황

데이터를 분석하거나 집계할 때 중복된 데이터는 잘못된 결과를 초래할 수 있습니다. 특히, 특정 열(region, category)의 집계 값이 중복된 order_id로 인해 부정확하게 계산될 경우, 이를 해결하기 위한 방법이 필요합니다.

 

2. 요구사항

주어진 데이터에서 다음과 같은 조건으로 데이터를 집계해야 합니다:

  1. 중복 데이터 처리:
    • region, category, order_id 조합이 중복된 경우 이를 제거해야 합니다.
  2. 카테고리별 집계:
    • 각 지역(region)별로 Furniture, Office Supplies, Technology 카테고리의 주문 수를 계산해야 합니다.
  3. 결과 정렬:
    • 지역 이름(region)을 기준으로 정렬해야 합니다.

 

3. 최종 SQL 쿼리

SELECT 
    region AS Region,
    SUM(CASE WHEN category = 'Furniture' THEN 1 ELSE 0 END) AS Furniture,
    SUM(CASE WHEN category = 'Office Supplies' THEN 1 ELSE 0 END) AS 'Office Supplies',
    SUM(CASE WHEN category = 'Technology' THEN 1 ELSE 0 END) AS Technology
FROM (
    SELECT DISTINCT region, category, order_id
    FROM records
) AS records1
GROUP BY region
ORDER BY region;

 

4. 쿼리 설명

1️⃣ DISTINCT로 중복 제거

SELECT DISTINCT region, category, order_id FROM records
  • 이 서브쿼리는 region, category, order_id 조합에서 중복된 데이터를 제거합니다.
  • 결과적으로, 동일한 region과 category에서 중복된 order_id가 포함되지 않습니다.

2️⃣ CASE WHEN으로 조건부 집계

SUM(CASE WHEN category = 'Furniture' THEN 1 ELSE 0 END) AS Furniture
  • 각 카테고리에 대해 조건부 집계를 수행합니다:
    • category = 'Furniture' 조건을 만족하면 1을 더합니다.
    • 조건을 만족하지 않으면 0을 반환.

3️⃣ GROUP BY로 지역별 집계

GROUP BY region
  • region을 기준으로 데이터를 그룹화하여, 지역별로 카테고리별 집계를 계산합니다.

4️⃣ 정렬

ORDER BY region
  • 결과를 region 기준으로 오름차순으로 정렬합니다.

 

5. 해결된 문제와 핵심 포인트

  1. 중복 데이터 제거
    • DISTINCT를 사용해 중복된 order_id 조합을 제거함으로써 정확한 데이터 집계를 보장.
  2. 조건부 집계 (CASE WHEN)
    • 각 카테고리별로 주문 수를 계산하며, 불필요한 값은 0으로 처리.
  3. 지역별 데이터 정리
    • GROUP BY를 통해 지역별로 데이터를 그룹화.
  4. 정렬과 가독성
    • 결과를 region 기준으로 정렬하여 데이터 가독성을 높임.

 

이 쿼리는 중복 데이터를 제거하고 카테고리별로 집계하는 SQL의 기본적인 활용 예제입니다.
DISTINCT, CASE WHEN, GROUP BY와 같은 SQL의 핵심 문법을 효과적으로 조합하여 데이터를 정확하게 집계하고 정렬하는 방법을 보여줍니다.

반응형