✔ Case, IF
지역별 주문의 특징
[SolveSql characteristics-of-orders]
/*
SELECT : 주문 지역, 해당 지역 내 가구 주문 수, 오피스 물품 주문 수, 전자기기 주문 수
FROM : records 테이블
GROUP BY : 주문 지역별
ORDER BY : 주문 지역 오름차순 정렬
*/
SELECT
region AS 'Region',
COUNT(
DISTINCT (
CASE
WHEN category = 'Furniture' THEN order_id
END
)
) AS 'Furniture',
COUNT(
DISTINCT (
CASE
WHEN category = 'Office Supplies' THEN order_id
END
)
) AS 'Office Supplies',
COUNT(
DISTINCT (
CASE
WHEN category = 'Technology' THEN order_id
END
)
) AS 'Technology'
FROM
records
GROUP BY
region
ORDER BY
region;
배송 예정일 예측 성공과 실패
[SolveSql estimated-delivery-date]
/*
SELECT : 구매 일자, 배송 예정 시각 안에 고객에게 도착한 주문 수, 배송 예정 시각이 지나 고객에게 도착한 주문 수
FROM : olist_orders_dataset 테이블
WHERE : 2017년 1월 한달 동안 발생한 주문이면서 배송 완료 또는 배송 예정 시각 데이터가 있는 경우
GROUP BY : 구매 일자별
ORDER BY : 구매 날짜 오름차순
*/
SELECT
DATE(order_purchase_timestamp) AS 'purchase_date',
COUNT(
DISTINCT (
CASE
WHEN DATE(order_delivered_customer_date) < DATE(order_estimated_delivery_date) THEN order_id
END
)
) AS 'success',
COUNT(
DISTINCT (
CASE
WHEN DATE(order_delivered_customer_date) >= DATE(order_estimated_delivery_date) THEN order_id
END
)
) AS 'fail'
FROM
olist_orders_dataset
WHERE
DATE(order_purchase_timestamp) BETWEEN '2017-01-01' AND '2017-01-31'
AND order_delivered_carrier_date IS NOT NULL
AND order_estimated_delivery_date IS NOT NULL
GROUP BY
DATE(order_purchase_timestamp)
ORDER BY
DATE(order_purchase_timestamp);
가구 판매의 비중이 높았던 날 찾기
/*
SELECT : 일별 주문수가 10개 이상인 날 중에서, 'Furniture' 카테고리 주문의 비율이 40% 이상이었던 주문 날짜, 해당 일의 Furniture 카테고리 주문 수, 해당 일의 전체 주문 대비 Furniture 카테고리 주문의 비율
FROM : records 테이블
GROUP BY : 주문 날짜
HAVING : 주문수가 10개 이상, 'Furniture' 카테고리 주문의 비율이 40% 이상
ORDER BY : 카테고리의 주문비율 내림차순, 날짜 오름차순
*/
SELECT
order_date,
COUNT(
DISTINCT CASE
WHEN category = 'Furniture' THEN order_id
END
) AS 'furniture',
ROUND(
COUNT(
DISTINCT CASE
WHEN category = 'Furniture' THEN order_id
END
) / (COUNT(DISTINCT order_id) + 0.00) * 100,
2
) AS 'furniture_pct'
FROM
records
GROUP BY
order_date
HAVING
COUNT(DISTINCT order_id) >= 10
AND furniture_pct >= 40
ORDER BY
furniture_pct DESC,
order_date ASC;
'Coding Test > SQL 알고리즘 실전' 카테고리의 다른 글
[MYSQL] SolveSql Window Function (0) | 2024.09.16 |
---|---|
[MYSQL] SolveSql Subquery, CTE (0) | 2024.08.26 |
[MYSQL] SolveSql String, Date (0) | 2024.08.05 |
[MYSQL] SolveSql Aggregate (0) | 2024.08.05 |
[MYSQL] SolveSql JOIN, UNION (0) | 2024.07.07 |