某店铺的商品信息表中记录了有哪些商品 问题:统计每个区域、每月、销量TOP1销售人员 【解题思路】 本题中出现了每个区域、每月、top1等关键词,你能想到什么? 这就是《猴子从零学会SQL》里讲过的典型业务问题,也就是经典的“分组汇总+排名”问题,要用到窗口函数来解决。 1.条件筛选 使用窗口函数前,先对订单明细表进行条件筛选,本题只要统计订单状态为支付的数据。 对应SQL如下: 使用窗口函数前,先对订单明细表进行条件筛选,本题只要统计订单状态为支付的数据。 对应SQL如下: 查询结果: 2.窗口函数 窗口函数的基本语法为: 常用的排序函数有rank、dense_rank、row_number,区别如下图。 本题中,需要统计每个区域、每月、销量TOP1销售人员。因此首先需要按照区域、月进行分组,销量降序为每个销售人员打上排名标签。 原表中没有"月"这一列,我们可以字符截取函数substr函数来获取'月'数据。substr函数用法如下: 本题中使用substr(支付时间,1,7) as "月"即可得到时间月列。那么使用何种类型的排序函数呢? 本题中若销量相同则计为并列排名,因此本题可以使用dense_rank排序函数。 查询结果: 我们来理解下窗口函数这部分语句。 1)首先按照区域和月进行分组 2)每个分组内按销量进行降序排列(本题比较特殊,每个分组内只有1行数据) 3)使用排序函数对每个分组打上排名标签。 2.找到TOP第1的销售人员 我们使用where语句对上一步得到的排名表t2进行筛选,即可得到本题答案。 查询结果: 【本题考点】 1.考察了窗口函数的应用,遇到“分组排名”问题,要想到用窗口函数解决。 2.考察了substr字符串截取函数的应用。 【举一反三】 统计每个区域销量TOP1销售人员。 参考答案: 查询结果: 推荐:如何从零学会SQL?