最近做了京东的24年春招题,题目如下:
题目分析
本题要求统计每个线下商家的销售总额、退款总额和平均满意度分数,并输出商家ID、商家名称、销售总额、退款总额、平均满意度分数。
输出字段:
- merchant_id(商家ID)
- merchant_name(商家名称)
- total_sales_amount(销售总额)
- total_refund_amount(退款总额)
- average_satisfaction_score(平均满意度分数,保留两位小数)
输出顺序:题目未指定排序,默认按商家ID升序输出。
涉及知识点:
- SQL 多表连接(JOIN)
- 子查询与聚合(SUM、COUNT、ROUND)
- 分组统计(GROUP BY)
- 字段别名
解答步骤
-
统计每个商家的销售总额
- 通过
sales_underline
表,按merchant_id
分组,计算每个商家的销售总额(sum(sale_amount)
)。 - 用子查询实现,并与主表
merchants_underline
连接。
- 通过
-
统计每个商家的退款总额
- 通过
refunds_underline
表,按merchant_id
分组,计算每个商家的退款总额(sum(refund_amount)
)。 - 用子查询实现,并与主表连接。
- 通过
-
统计每个商家的平均满意度分数
- 通过
satisfaction_underline
表,按merchant_id
分组,计算每个商家的平均满意度分数(sum(satisfaction_score)/count(*)
),并用ROUND(..., 2)
保留两位小数。 - 用子查询实现,并与主表连接。
- 通过
-
主查询整合所有信息
- 以
merchants_underline
为主表,分别与上述三个子查询通过merchant_id
连接,输出所需字段。
- 以
- 多表聚合子查询
本题的难点在于需要对不同的表分别聚合(销售、退款、满意度),再通过主表将结果整合。
例如,销售总额子查询:select m.merchant_id as merchant_id, sum(s.sale_amount) as total_sales_amount from merchants_underline m left join sales_underline s on m.merchant_id = s.merchant_id group by merchant_id
这样可以保证每个商家即使没有销售记录也能被统计(用左连接)。
完整代码
select
m.merchant_id,
m.merchant_name,
s.total_sales_amount,
r.total_refund_amount,
su.average_satisfaction_score
from merchants_underline m
left join (
select m.merchant_id as merchant_id, sum(s.sale_amount) as total_sales_amount
from merchants_underline m
join sales_underline s on m.merchant_id = s.merchant_id
group by merchant_id
) s on m.merchant_id = s.merchant_id
left join (
select m.merchant_id as merchant_id, sum(r.refund_amount) as total_refund_amount
from merchants_underline m
join refunds_underline r on m.merchant_id = r.merchant_id
group by merchant_id
) r on m.merchant_id = r.merchant_id
left join (
select m.merchant_id as merchant_id, round(sum(su.satisfaction_score)/count(*), 2) as average_satisfaction_score
from merchants_underline m
join satisfaction_underline su on m.merchant_id = su.merchant_id
group by merchant_id
) su on m.merchant_id = su.merchant_id
近似题目练习推荐
- 知识点:左连接、分组和排序、子查询
如需更多类似题目,可在牛客网SQL练习区搜索“多表连接”、“分组聚合”等关键词进行练习。