首页 > 解决方案 > 运行聚合函数后如何获取 id 值

问题描述

给出一个看起来像的评论表

| id | post_id | reply_count
| 1  | 1       | 10
| 2  | 2       | 5
| 3  | 1       | 20

我正在尝试返回带有 id 且回复计数最多的评论,所以我希望查询返回 id 为 2 和 3 的行。

| id | post_id | reply_count
| 2  | 2       | 5
| 3  | 1       | 20

如果我尝试跑步

SELECT id, max(reply_count) as reply_count, post_id
From Comment
GROUP BY post_id

我明白了SELECT list is not in GROUP BY clause and contains nonaggregated column。我知道这是因为如果多个 post_id 具有相同的回复计数,则可以返回多个 id,但是在这些情况下有没有办法让它只返回 min(id)?

我已经看到了更改 sql 模式的建议,我想知道是否有办法在不这样做的情况下获得我想要的结果

mysql版本:8.0.25

标签: mysqlsql

解决方案


在 mysql 8 及更高版本中:

select * from (
   select * , row_number() over (partition by post_id order by reply_count desc) rn
   from tablename
) t where rn = 1

推荐阅读