No testdata at current.
使用左连接算法与分组聚合算法。
以全量优惠券表 coupons 为主表,通过 LEFT JOIN 关联订单表 orders。这样即使某张优惠券没有对应订单,也会保留在结果中。
某电商平台营销团队需要复盘各优惠券的使用情况,以评估投放效果并优化后续营销策略。已知系统有一张全量优惠券表记录了所有已配置的优惠券,以及一张订单记录表记录了用户下单时使用的优惠券。请统计所有优惠券(包含尚未被使用的优惠券)的使用次数、对应订单总金额和总优惠金额,按使用次数从高到低排序。
表名:coupons — 优惠券信息表(全量优惠券) 包含字段:优惠券 ID、优惠券名称、面值
表名:orders — 订单表 包含字段:订单 ID、优惠券 ID、订单实付金额
表的字段类型和约束请参考示例中的建表语句。
输出每种优惠券的优惠券 ID、优惠券名称、使用次数、订单总金额、总优惠金额。使用次数为 0 时,订单总金额和总优惠金额均显示为 0 。按使用次数从高到低排序,使用次数相同的按优惠券 ID 升序排列。使用次数及金额计算的具体含义请参考示例的输出及说明。
输入
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS coupons;
CREATE TABLE coupons (
coupon_id VARCHAR(20) PRIMARY KEY,
coupon_name VARCHAR(50),
face_value DECIMAL(10,2)
);
CREATE TABLE orders (
order_id VARCHAR(20) PRIMARY KEY,
coupon_id VARCHAR(20),
pay_amount DECIMAL(10,2)
);
INSERT INTO coupons VALUES
('C001','满减券A',10.00),
('C002','满减券B',20.00),
('C003','折扣券C',5.50),
('C004','新人券D',15.00),
('C005','神券E',50.00);
INSERT INTO orders VALUES
('O001','C001',100.00),
('O002','C001',200.50),
('O003','C001',99.99),
('O004','C002',50.00),
('O005','C002',150.00),
('O006','C003',30.00),
('O007','C005',500.00),
('O008','C001',100.00);
输出
coupon_id|coupon_name|use_cnt|total_order_amount|total_discount
C001|满减券A|4|500.49|40.00
C002|满减券B|2|200.00|40.00
C003|折扣券C|1|30.00|5.50
C005|神券E|1|500.00|50.00
C004|新人券D|0|0.00|0.00
说明
场景1: C001有4笔订单(100.00+200.50+99.99+100.00) -> use_cnt=4, total_order_amount=500.49, total_discount=10.00*4=40.00
场景2: C002有2笔订单(50.00+150.00) -> use_cnt=2, total_order_amount=200.00, total_discount=20.00*2=40.00
场景3: C003有1笔订单(30.00) -> use_cnt=1, total_order_amount=30.00, total_discount=5.50*1=5.50
场景4: C004无任何订单 -> use_cnt=0, SUM(pay_amount)=NULL, 转为0, total_order_amount=0, total_discount=15.00*0=0.00
场景5: C005有1笔订单(500.00) -> use_cnt=1, total_order_amount=500.00, total_discount=50.00*1=50.00
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册