点击关注公众号,干货第一时间送达

这题不难,
只要看过小编前面的文章:
掌握了如何使用 "开窗排序" 即可。
今天再看一遍,权当复习巩固了吧。
【温馨提示:建表语句及数据导入脚本,可以翻看前面的文章:
一、需求场景
题目:
从订单明细表order_detail中,查询每个商品销售件数最多的日期及当日销量,如果有商品多日销量并列,取最小的日期。
订单明细表order_detail:

正确结果:

二、解决方案
演示工具:Hive-3.1.3 + DataGrip2022
解题的思路就是需要先按照商品(sku_id)和销售日(creat_date)
进行分组,sum() 销量,
因为可能存在同一件商品(sku_id),同一天有多笔订单,
所以需要累加上每笔订单的 sku_num。
再对每日的销量进行开窗排序,然后取第1名即可。
(1)分组计算每个商品的单日总销量
select sku_id, create_date, sum(sku_num) as amt
from order_detail
group by sku_id, create_date
结果集:

(2)对每个商品的单日总销量进行开窗排序
select sku_id,create_date,
amt,
dense_rank() over (partition by sku_id order by amt desc) as rk
from (
select sku_id, create_date, sum(sku_num) as amt
from order_detail
group by sku_id, create_date
)t1
结果集:

(3)筛选每个商品的单日总销量最高的即可
select *
from (
select sku_id,create_date,
amt,
dense_rank() over (partition by sku_id order by amt desc) as rk
from (
select sku_id, create_date, sum(sku_num) as amt
from order_detail
group by sku_id, create_date
)t1
)t2
where rk=1
结果集:


文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




