반응형
https://solvesql.com/problems/characteristics-of-orders/
https://solvesql.com/problems/characteristics-of-orders/
solvesql.com
1. 문제 상황
데이터를 분석하거나 집계할 때 중복된 데이터는 잘못된 결과를 초래할 수 있습니다. 특히, 특정 열(region, category)의 집계 값이 중복된 order_id로 인해 부정확하게 계산될 경우, 이를 해결하기 위한 방법이 필요합니다.
2. 요구사항
주어진 데이터에서 다음과 같은 조건으로 데이터를 집계해야 합니다:
- 중복 데이터 처리:
- region, category, order_id 조합이 중복된 경우 이를 제거해야 합니다.
- 카테고리별 집계:
- 각 지역(region)별로 Furniture, Office Supplies, Technology 카테고리의 주문 수를 계산해야 합니다.
- 결과 정렬:
- 지역 이름(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. 해결된 문제와 핵심 포인트
- 중복 데이터 제거
- DISTINCT를 사용해 중복된 order_id 조합을 제거함으로써 정확한 데이터 집계를 보장.
- 조건부 집계 (CASE WHEN)
- 각 카테고리별로 주문 수를 계산하며, 불필요한 값은 0으로 처리.
- 지역별 데이터 정리
- GROUP BY를 통해 지역별로 데이터를 그룹화.
- 정렬과 가독성
- 결과를 region 기준으로 정렬하여 데이터 가독성을 높임.
이 쿼리는 중복 데이터를 제거하고 카테고리별로 집계하는 SQL의 기본적인 활용 예제입니다.
DISTINCT, CASE WHEN, GROUP BY와 같은 SQL의 핵심 문법을 효과적으로 조합하여 데이터를 정확하게 집계하고 정렬하는 방법을 보여줍니다.
반응형
'SQL' 카테고리의 다른 글
| [SQL/프로그래머스 LV.3] 헤비 유저가 소유한 장소 (3) | 2025.01.16 |
|---|---|
| [SQL/solvesql] LV3. 쇼핑몰의 일일 매출액과 ARPPU (6) | 2025.01.16 |
| [SQL/프로그래머스] LV3. 배송 예정일 예측 성공과 실패 (2) | 2024.12.21 |
| [SQL/프로그래머스] LV2. 상품 별 오프라인 매출 구하기 (1) | 2024.12.05 |
| [SQL/프로그래머스] LV3. 없어진 기록 찾기 (4) | 2024.12.05 |