SQL在线教育案例:如何分析销售数据?(自定义排序,表连接)

【面试题】

有一张“课程销售订单表”,包含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 a1
left join
课程销售订单表 as a2
on a1.用户id = a2.用户id and a1.第一次下单日期 = a2.下单日期;

 

3. 自定义排序

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


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

【本题考点】

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

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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值