使用Hive查询每年QUANTITYORDERED最高的月份
Hive查询:找出每年销量最高的月份
要解决这个问题,你可以通过分组计算月销量总和结合窗口函数排名的方式筛选出每年销量最高的月份,以下是两种常用实现方案:
方案1:仅返回每个年份的一个最高销量月份(无并列时适用)
如果不需要处理同一年份多个月份销量并列最高的情况,使用ROW_NUMBER()窗口函数:
WITH monthly_sales AS ( -- 按年、月分组,计算每个月的总销量 SELECT YEAR_ID, MONTH_ID, SUM(QUANTITYORDERED) AS total_quantity FROM your_table_name -- 替换为你的实际表名 GROUP BY YEAR_ID, MONTH_ID ), ranked_sales AS ( -- 按年份分区,对月销量总和降序排名 SELECT YEAR_ID, MONTH_ID, total_quantity, ROW_NUMBER() OVER (PARTITION BY YEAR_ID ORDER BY total_quantity DESC) AS rank_num FROM monthly_sales ) -- 筛选每个年份排名第一的月份 SELECT YEAR_ID, MONTH_ID, total_quantity FROM ranked_sales WHERE rank_num = 1;
方案2:返回同一年份所有并列最高的月份
如果存在某一年多个月份销量总和相同且均为最高的情况,使用RANK()窗口函数可保留所有并列记录:
WITH monthly_sales AS ( SELECT YEAR_ID, MONTH_ID, SUM(QUANTITYORDERED) AS total_quantity FROM your_table_name -- 替换为你的实际表名 GROUP BY YEAR_ID, MONTH_ID ), ranked_sales AS ( SELECT YEAR_ID, MONTH_ID, total_quantity, RANK() OVER (PARTITION BY YEAR_ID ORDER BY total_quantity DESC) AS rank_num FROM monthly_sales ) SELECT YEAR_ID, MONTH_ID, total_quantity FROM ranked_sales WHERE rank_num = 1;
逻辑说明
monthly_sales公共表表达式(CTE)负责聚合每个年份-月份的总销量;ranked_sales中通过PARTITION BY YEAR_ID将数据按年份拆分,ORDER BY total_quantity DESC确保销量最高的月份排名第一;- 最后通过
WHERE rank_num = 1筛选出目标记录。
内容的提问来源于stack exchange,提问作者Pratap Reddy
相关产品推荐
相关产品推荐

