【面试题】
有两张表,“产品表”包含2个字段:产品、产品线。
“订单表”包含7个字段:订单id、顾客id、交易日期、产品、店铺、件数、金额。
问题:查询产品线(category_3)销量排名第二的店铺。
【解题步骤】
1. 解题思路
问题要分析某个产品线的销量情况。能计算“销量”的字段“件数”在“订单表”里,“产品线”在“产品表”里。
因此,涉及到两个表,要想到《猴子从零学会SQL》里讲过的用“多表查询”
为了保留“订单表”里的全部数据,以“订单表”为左表(记为子查询a1),进行左联结。
“产品表”为右表(记为子查询a2)。
关联条件是字段“产品”。
将子查询a1、a2代入:
查询结果:
将以上SQL记为子查询a3。
3. 汇总分析
问题是查询产品线(category_3)销量排名第二的店铺,所以:
1)只需要关注产品线为category_3的订单;
2)按店铺分类汇总,以获得产品线(category_3)在各店铺的销量;
3)销量为“件数”求和,因为每一单不一定只有1件产品。
将子查询a3代入:
将以上SQL记为子查询a4。
4. 窗口函数
查询排名一般使用窗口函数,常见的关于排名的窗口函数有三种:
防止有并列排名的情况,我们选择dense_rank()。
将子查询a4代入:
将以上SQL记为子查询a5。
最后,筛选出排名为2的店铺:
将子查询a5代入:
【本题考点】
1)考查对分组汇总的了解,以及灵活使用来解决业务问题;
2)考查对多表联结的了解,以及灵活使用来解决业务问题;
3)考查对窗口函数的了解。