SELECT customer_id, product_name, customer_buy_ct
FROM(SELECT
customer_id, product_name, customer_buy_ct
, RANK()OVER(PARTITIONBY customer_id ORDERBY customer_buy_ct DESC)AS rk
FROM(SELECT
customer_id, product_name
,COUNT(1)AS customer_buy_ct -- 购买次数FROM t_sales a
JOIN t_product b
ON a.product_id = b.product_id
GROUPBY customer_id, product_name
) a
) b
WHERE rk =1;
customer_id
product_name
customer_buy_ct
A
sauce
3
B
pasta
2
B
salad
2
B
sauce
2
C
sauce
5
D
pasta
2
D
salad
2
D
sauce
2
E
sauce
4
顾客成为会员后, 最先购买的是什么
SELECT customer_id, product_name, order_date
FROM(SELECT
customer_id, product_name, order_date
, RANK()OVER(PARTITIONBY customer_id ORDERBY order_date)AS rk
FROM(SELECT
customer_id, order_date, product_id, join_date
FROM t_member a
LEFTJOIN t_sales b ON a.member_id = b.customer_id
) a
JOIN t_product b ON a.product_id = b.product_id
WHERE order_date >= join_date
) t
WHERE rk =1GROUPBY customer_id, product_name, order_date
;
customer_id
product_name
order_date
A
salad
2023-11-07
C
salad
2023-11-11
D
pasta
2023-11-11
顾客在成为会员之前, 最后购买的产品是什么
SELECT customer_id, product_name, order_date
FROM(SELECT
customer_id, product_name, order_date
, RANK()OVER(PARTITIONBY customer_id ORDERBY order_date DESC)AS rk
FROM(SELECT
customer_id, order_date, product_id, join_date
FROM t_member a
LEFTJOIN t_sales b ON a.member_id = b.customer_id
) a
JOIN t_product b ON a.product_id = b.product_id
WHERE order_date < join_date
) t
WHERE rk =1GROUPBY customer_id, product_name, order_date
;
customer_id
product_name
order_date
A
pasta
2023-11-01
A
salad
2023-11-01
C
pasta
2023-11-07
C
sauce
2023-11-07
D
pasta
2023-11-09
顾客在成为会员之前, 总的购买产品数,和总的消费金额
SELECT
customer_id
,COUNT(a.product_id)AS sales_quantity
,SUM(price)AS sales_amount
FROM(SELECT
customer_id, order_date, product_id, join_date
FROM t_member a
LEFTJOIN t_sales b ON a.member_id = b.customer_id
) a
JOIN t_product b ON a.product_id = b.product_id
WHERE order_date < join_date
GROUPBY customer_id
;
customer_id
sales_quantity
sales_amount
A
2
45.0
C
4
86.0
D
4
92.0
每消费1元有10积分, sauce 有双倍积分, 每位顾客有多少积分
SELECT
customer_id
,SUM(CASEWHEN product_name ='sauce'THEN price *2*10ELSE price *10END)AS total_scores
FROM(SELECT customer_id, product_name, price
FROM t_sales a
JOIN t_product b ON a.product_id = b.product_id
) a
GROUPBY customer_id
;