MySQL统计字段值出现次数并返回Top3高频值的查询方法
问题背景
待查询的数据表(假设表名为color_stats,请替换为实际业务中的表名)存储数据如下:
| id | color_value |
|---|---|
| 3 | yellow |
| 5 | yellow |
| 12 | red |
| 33 | green |
| 47 | purple |
| 58 | red |
| 59 | red |
| 61 | orange |
| 62 | green |
查询目标:
- 统计
color_value字段每个颜色取值对应的总记录数 - 返回使用频次排名前三的颜色统计结果
实现SQL
SELECT color_value, COUNT(*) AS total_count FROM `color_stats` GROUP BY color_value ORDER BY total_count DESC LIMIT 3;
逻辑说明
- 用
GROUP BY按color_value字段分组,将相同颜色的记录聚合到同一分组 - 用
COUNT(*)统计每个分组内的记录总数,结果别名设为total_count,方便识别 - 按统计得到的总条数降序排序,让出现频次高的颜色排在结果靠前位置
- 用
LIMIT 3截取排序后的前3条记录,即为频次Top3的统计结果
执行结果参考
针对给出的样例数据,执行上述SQL后返回结果如下:
| color_value | total_count |
|---|---|
| red | 3 |
| yellow | 2 |
| green | 2 |
补充说明:如果业务场景下需要把所有和第三名频次相同的并列结果全部返回,不做截断,可以使用
RANK()窗口函数先做排名再筛选,适配并列排名的需求。
内容的提问来源于stack exchange,提问作者Timppa
相关产品推荐
相关产品推荐

