MySQL分组查询求助:计算每日销量Top5商品的平均单价
解决方案
要实现全时段内每日销量Top5商品的平均单价查询,需要借助窗口函数对每日的销售记录进行分组排序,筛选出Top5后再计算平均值。以下是适配MySQL 8.0及以上版本的查询语句:
SELECT Date, AVG(PricePer) AS Average_Price_Top_Five_Sellers FROM ( SELECT Date, PricePer, Quantity, -- 按日期分组,每组内按销量降序排名 ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Quantity DESC) AS sales_rank FROM tblsales ) ranked_sales -- 筛选每日销量前5的记录 WHERE sales_rank <= 5 -- 按日期分组计算平均单价 GROUP BY Date ORDER BY Date;
细节说明
- 窗口函数逻辑:子查询中
PARTITION BY Date将数据按日期拆分,ORDER BY Quantity DESC让每个日期内的商品按销量从高到低排序,ROW_NUMBER()为每条记录分配组内排名。 - 排名规则调整:如果需要将销量相同的商品都纳入Top5(例如某天有3个商品销量并列第5),可以将
ROW_NUMBER()替换为RANK()或DENSE_RANK():RANK():相同销量会获得相同排名,后续排名会跳过(比如1,1,3)DENSE_RANK():相同销量获得相同排名,后续排名连续(比如1,1,2)
- 字段对应:注意原表字段是
PricePer,替换了你原查询中写错的Price。
内容的提问来源于stack exchange,提问作者Luke Krell
相关产品推荐
相关产品推荐

