ITPub博客

首页 > 数据库 > 数据库开发技术 > 在线教育案例:如何分析销售数据?

在线教育案例:如何分析销售数据?

原创 数据库开发技术 作者:猴子数据分析 时间:2021-07-08 21:00:00 0 删除 编辑


【面试题】


有一张“课程销售订单表”,包含4个字段:用户id、下单日期、下单id、学科。


问题:查询每个用户第一个订单的记录,如果同时下单了包含多个课程的订单,则按照“语文、数学、英语”顺序排序。


【解题步骤】


1. 汇总分析


查询“每个用户第一个订单”,涉及到“每个”,要想到《猴子 从零学会SQL》里讲过的要用“分组汇总”解决该类问题。按用户id分组(group by),第一个订单的记录是指“下单日期”这一列最小的值(汇总用min函数)


select 用户id,       min(下单日期) as 第一次下单日期from 课程销售订单表group by 用户id;


查询结果:


2. 多表联结


上面只获取到第一次下单用户的用户id、第一次下单日期。而题目要求如果同时下单了包含多个课程的订单,则按照“语文、数学、英语”顺序排序。


这就要获取到表里的其它数据。可以把上面查询结果作为表a1,和“课程销售订单表”(记为表a2)进行多表联结。



使用多表联结,查询每个用户第一个订单的记录:


select a2.*from(select 用户id,        min(下单日期) as 第一次下单日期from 课程销售订单表group by 用户id) as a1left join课程销售订单表 as a2on a1.用户id = a2.用户id and a1.第一次下单日期 = a2.下单日期;


查询结果:


3. 自定义排序


按照“语文、数学、英语”顺序排序,涉及到自定义排序:order by field()的使用。


select a2.*from(select 用户id,        min(下单日期) as 第一次下单日期from 课程销售订单表group by 用户id) as a1left join课程销售订单表 as a2on a1.用户id = a2.用户id and a1.第一次下单日期 = a2.下单日期order by 用户id,field(学科, '语文', '数学', '英语');



【本题考点】


1.涉及到“每个”的问题,要想到《猴子从零学会SQL》里讲过的用“分组汇总”或者“窗口函数”来解决


2.考查对多表联结的应用


3.考查对order by中自定义排序的使用



推荐:如何从零学会SQL?


原文作者:猴子数据分析;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2017-01-16

  • 博文量
    865
  • 访问量
    345601