mysql - 运行聚合函数后如何获取 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
解决方案
在 mysql 8 及更高版本中:
select * from (
select * , row_number() over (partition by post_id order by reply_count desc) rn
from tablename
) t where rn = 1
推荐阅读
- php - 如何在 corephp 中使用 Unbounce api 获取潜在客户列表
- d3.js - 如何在d3中的圆弧内的圆内显示图像
- javascript - 使用 react-table 每周显示标题
- python - Python使用函数的返回值作为参数?
- python - 带有条件的 Pandas 中的唯一计数
- git - 使用 Git,找到可从 branchA 和 branchB 访问的提交
- python - 在任务计划程序中触发 Python 和 py 不起作用
- reporting-services - SSRS 报告中嵌套表下出现不需要的空间
- reactjs - React JS - 错误 - 期望一个赋值或函数调用,而是看到一个表达式 no-unused-expressions
- c# - 为什么“de-IT”是本地有效的 CultureInfo 而不是生产?