
大数据SQL题01 查询累积销量排名第二的商品
原题链接:http://practice.atguigu.cn/#/question/1/desc?qType=SQL查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。
·
原题链接:http://practice.atguigu.cn/#/question/1/desc?qType=SQL
题目需求
查询订单明细表(order_detail)中销量(下单件数)排名第二的商品id,如果不存在返回null,如果存在多个排名第二的商品则需要全部返回。
期望结果如下:
sku_id |
---|
11 |
需要用到的表:
订单明细表:order_detail
order_detail_id(订单明细id) | order_id(订单id) | sku_id(商品id) | create_date(下单日期) | price(商品单价) | sku_num(商品件数) |
---|---|---|---|---|---|
1 | 1 | 1 | 2021-09-30 | 2000.00 | 2 |
2 | 1 | 3 | 2021-09-30 | 5000.00 | 5 |
22 | 10 | 4 | 2020-10-02 | 6000.00 | 1 |
23 | 10 | 5 | 2020-10-02 | 500.00 | 24 |
24 | 10 | 6 | 2020-10-02 | 2000.00 | 5 |
解题思路
- 首先根据商品id分组,统计商品总销量;
- 使用开窗函数dense_rank()求出商品id对应的销量排名(可并列、不空缺);
- 取出排名为2的sku_id;
- 虚拟一个主表,避免取不到数据的情况。
SELECT sku_id
FROM
(
SELECT 1
) t1
LEFT JOIN
(
SELECT sku_id
FROM
(
SELECT sku_id,
dense_rank() over (ORDER BY sku_num desc) AS rk
FROM
(
SELECT sku_id,
SUM(sku_num) AS sku_num
FROM order_detail
GROUP BY sku_id
) t2
) t3
WHERE rk = 2
) t4
ON 1 = 1
更多推荐
所有评论(0)