电商业务,一个订单表 orders
和一个用户表 users
。你需要分析用户的购买行为,特别是那些在特定时间段内购买金额超过一定阈值的用户,并计算他们的平均购买金额、购买次数以及他们在总用户中的占比。
表结构:
users
):
user_id
(用户ID, 主键)register_date
(注册日期)city
(所在城市)orders
):
order_id
(订单ID, 主键)user_id
(用户ID, 外键)order_date
(订单日期)amount
(订单金额)需求:
参考SQL:
WITH high_value_users AS (
SELECT
u.user_id,
u.city,
SUM(o.amount) AS total_amount,
COUNT(o.order_id) AS total_orders
FROM
users u
JOIN
orders o ON u.user_id = o.user_id
WHERE
o.order_date BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY
u.user_id, u.city
HAVING
SUM(o.amount) > 10000
),
total_users AS (
SELECT
COUNT(DISTINCT user_id) AS total_user_count
FROM
users
),
city_stats AS (
SELECT
city,
COUNT(user_id) AS high_value_user_count,
COUNT(user_id) * 1.0 / (SELECT total_user_count FROM total_users) AS high_value_user_ratio
FROM
high_value_users
GROUP BY
city
)
SELECT
hvu.user_id,
hvu.city,
hvu.total_amount,
hvu.total_orders,
AVG(hvu.total_amount) OVER () AS avg_amount,
AVG(hvu.total_orders) OVER () AS avg_orders,
cs.high_value_user_count,
cs.high_value_user_ratio
FROM
high_value_users hvu
JOIN
city_stats cs ON hvu.city = cs.city;
解释: