MySQL 5.7.21如何获取包含并列项的销量TOP3产品
实现包含并列项的销量TOP3查询(MySQL 5.7适配版)
嘿,针对你这个要包含并列项的TOP3需求,结合你用的MySQL 5.7版本(不支持窗口函数),给你一个最简的实现方案:
核心思路
先提取出销量排名前3的不同销量值(比如你示例里的12、7、5),然后筛选所有销量属于这些值的产品,这样就能把所有并列的TOP3产品都包含进来。
最终查询语句
SELECT articles.name AS 'Product Name', overview.article_count FROM ( -- 先计算每个产品的总销量 SELECT articel_id, COUNT(articel_id) AS article_count FROM sales_records_row GROUP BY articel_id ) AS overview JOIN articles ON articles.articel_id = overview.articel_id -- 筛选销量属于前3个不同销量值的产品 WHERE overview.article_count IN ( SELECT DISTINCT article_count FROM ( -- 取降序排列的前3个销量值 SELECT COUNT(articel_id) AS article_count FROM sales_records_row GROUP BY articel_id ORDER BY article_count DESC LIMIT 3 ) AS top_3_sales ) -- 最后按销量降序、产品名排序,结果更规整 ORDER BY overview.article_count DESC, articles.name;
效果说明
这个语句会返回所有销量处于前3个销量等级的产品:
- 比如你示例里的销量12(第1名)、7(第2名)、5(第3名),所有销量为这三个值的产品都会被选中,最终得到5条数据,完全符合你的需求。
小提示
注意你原查询里的拼写:articel_id应该是article_id(少了一个l),如果数据库字段是正确的拼写,记得统一修正哦。
内容的提问来源于stack exchange,提问作者Marv
相关产品推荐
相关产品推荐

