86 lines
No EOL
2.7 KiB
SQL
86 lines
No EOL
2.7 KiB
SQL
-- 1) 3 months old or less orders received more than 3 days after expected date.
|
|
WITH last_date AS (
|
|
SELECT MAX(MAX(
|
|
order_purchase_timestamp,
|
|
order_approved_at,
|
|
order_delivered_carrier_date,
|
|
order_delivered_customer_date,
|
|
order_estimated_delivery_date
|
|
)) AS max_date
|
|
FROM orders
|
|
)
|
|
SELECT *
|
|
FROM orders
|
|
WHERE order_status NOT IN ('unavailable', 'canceled')
|
|
AND (julianday((SELECT max_date FROM last_date)) - julianday(order_purchase_timestamp)) < 90
|
|
AND julianday(order_delivered_customer_date) - julianday(order_estimated_delivery_date) >= 3;
|
|
|
|
|
|
-- 2) Sellers generating sales of over 100000 reals
|
|
-- assuming : price does not have to be multiplied with order_item_id
|
|
select seller_id, sum(price)
|
|
from order_items
|
|
group by seller_id
|
|
HAVING sum(price) > 100000;
|
|
|
|
|
|
-- 3) Who are the new sellers (less than 3 months old) who
|
|
-- are already very committed to the platform (having already sold more than 30
|
|
-- products)?
|
|
-- assuming :
|
|
-- order_item_id counts the number of items ordered
|
|
-- using order_purchase_timestamp is the only way to find a seller first activity
|
|
WITH last_date AS (
|
|
SELECT MAX(MAX(
|
|
order_purchase_timestamp,
|
|
order_approved_at,
|
|
order_delivered_carrier_date,
|
|
order_delivered_customer_date,
|
|
order_estimated_delivery_date
|
|
)) AS max_date
|
|
FROM orders
|
|
),
|
|
first_sale_dates AS (
|
|
SELECT seller_id, MIN(order_purchase_timestamp) as first_sale
|
|
FROM orders o
|
|
JOIN order_items oi ON o.order_id = oi.order_id
|
|
GROUP BY seller_id
|
|
)
|
|
SELECT seller_id, sum(order_item_id)
|
|
FROM order_items oi
|
|
WHERE seller_id IN (
|
|
SELECT seller_id
|
|
FROM first_sale_dates
|
|
WHERE (julianday((SELECT max_date FROM last_date)) - julianday(first_sale)) < 90
|
|
)
|
|
GROUP BY seller_id
|
|
HAVING sum(order_item_id) > 30;
|
|
|
|
|
|
-- 4) What are the 5 zip codes with:
|
|
-- more than 30 reviews,
|
|
-- the worst average review score over the last 12 months?
|
|
-- assuming :
|
|
-- zip_code is about the sellers
|
|
WITH last_date AS (
|
|
SELECT MAX(MAX(
|
|
order_purchase_timestamp,
|
|
order_approved_at,
|
|
order_delivered_carrier_date,
|
|
order_delivered_customer_date,
|
|
order_estimated_delivery_date
|
|
)) AS max_date
|
|
FROM orders
|
|
)
|
|
SELECT
|
|
s.seller_zip_code_prefix AS zip_code,
|
|
AVG(r.review_score) AS mean_reviews_score,
|
|
COUNT(r.review_id) AS reviews_count
|
|
FROM sellers s
|
|
JOIN order_items oi ON s.seller_id = oi.seller_id
|
|
JOIN order_reviews r ON oi.order_id = r.order_id
|
|
WHERE julianday((SELECT max_date FROM last_date)) - julianday(r.review_creation_date) <= 365
|
|
GROUP BY s.seller_zip_code_prefix
|
|
HAVING reviews_count > 30
|
|
ORDER BY mean_reviews_score ASC
|
|
LIMIT 5; |