어쩌다보니 3회차보다 빨리 오답을 하게 된 4회차...😅
어제 SQL로 데이터 분석을 해봤던게 도움이 됐던 것 같다!
문제1 (O)
지역별로 매출이 가장 높은 매장의 매출을 조회하는 SQL 문을 작성해주세요. 단, 해당 지역에 매장이 두 개 이상인 경우만 결과에 포함해주세요. 결과는 지역 이름을 기준으로 오름차순으로 정렬해주세요.
SELECT REGION_NAME region_name,
MAX(SALES) highest_sales
FROM stores
GROUP BY REGION_NAME
HAVING COUNT(STORE_ID) >= 2
ORDER BY region_name;
문제2 (X)
최근 특정 사용자들이 결제를 하지 않고 상품을 주문하거나, 결제를 하지 않은 시점에 이미 상품을 주문하는 버그가 발견되었습니다. 🐞 해당 버그를 악용한 사용자를 파악하기 위해 SQL 문을 작성해주세요. 다음 조건에 해당되는 사용자 수를 출력해주세요 :
- 결제를 하지 않고 상품을 주문한 사용자
- 첫 번째 결제일보다 이전에 상품을 주문한 사용자
WITH first_payment AS (
SELECT USER_ID,
MIN(PAY_DATE) AS FIRST_PAY_DATE
FROM payments
GROUP BY USER_ID
)
SELECT COUNT(DISTINCT o.USER_ID) cnt
FROM orders o
LEFT JOIN first_payment fp
ON o.USER_ID = fp.USER_ID
WHERE fp.FIRST_PAY_DATE > o.ORDER_DATE
OR fp.FIRST_PAY_DATE IS NULL;
- 첫 번째 결제일보다 이전 이라는 말을 고려하지 못했다...
- 하지만 아직 WITH 구문에 익숙하지 않아서 알았더라도 틀렸을지도?
문제3 (O)
데이터 분석팀은 고객이 특정 상품 X를 구매했을 때 상품 Y도 함께 구매할 확률을 분석하고자 합니다. 이를 위해, 쇼핑 카트 데이터에서 서로 다른 두 제품 X와 Y가 같은 주문(CART_ID)에 포함된 주문 수를 확인하려고 합니다.
- 제품 X와 Y가 같은 주문에 포함된 경우를 계산합니다.
- 두 제품은 서로 다른 이름이어야 하며, 한 쌍의 경우(예: Coffee와 Sausages)는 다른 순서(예: Sausages와 Coffee)로도 포함됩니다.
- 결과는 각 제품 쌍과 해당 제품이 함께 포함된 주문 수를 반환해야 합니다.
- 제품 이름 X와 Y를 기준으로 알파벳 순으로 오름차순 정렬합니다.
-- 나의 풀이
SELECT c.NAME name_x,
cp.NAME name_y,
COUNT(*) orders
FROM cart_products c
JOIN cart_products cp
ON c.CART_ID = cp.CART_ID
WHERE c.NAME != cp.NAME
GROUP BY 1, 2
ORDER BY 1, 2;
-- 튜터님 풀이
SELECT
A.NAME AS name_x,
B.NAME AS name_y,
COUNT(DISTINCT A.CART_ID) as orders
FROM cart_products A
JOIN cart_products B
ON A.CART_ID = B.CART_ID AND A.NAME <> B.NAME
GROUP BY A.NAME, B.NAME
ORDER BY A.NAME, B.NAME;
- 처음에는 좀 헤맸는데 JOIN을 떠올리니 그 다음부터는 어렵지 않았음..! 튜터님 풀이와의 차이점을 비교해 보자면 ▼
차이점 | 나의 풀이 | 튜터님 풀이 |
조건 적용 위치 | WHERE 조건을 나중에 적용하므로 JOIN 과정에서 더 많은 데이터가 결합될 수 있음 | JOIN 단계에서 조건을 미리 적용하므로, 불필요한 데이터가 결합되는 것을 방지 |
DISTINCT 사용 유무 | 중복 데이터가 포함될 가능성이 높아 추가 처리가 필요할 수 있음 | DISTINCT를 활용하여 중복된 CART_ID를 제외하므로 정확하고 깔끔한 결과를 제공 |
'SQL' 카테고리의 다른 글
QCC 5회차 오답 (0) | 2025.03.02 |
---|---|
SQL 코드카타: Rising Temperature (0) | 2025.02.13 |
SQL을 활용한 뉴스레터 구독자 데이터 분석 (0) | 2025.01.15 |
SQL 코드카타: Invalid Tweets (0) | 2025.01.14 |
SQL 코드카타: 상품을 구매한 회원 비율 구하기 (0) | 2025.01.07 |