You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何不使用GROUP BY返回符合条件的所有行及结果集最大值

解决方案

可以使用窗口函数实现需求,无需GROUP BY,不用重复书写WHERE条件,且性能远优于子查询或UNION方案:

SELECT 
    UserID, 
    UserName, 
    UserScore, 
    MAX(UserScore) OVER() AS ScoreMax 
FROM Users
WHERE UserScore > 30
ORDER BY UserScore;

原理说明

  • MAX(UserScore) OVER() 是窗口函数的用法,当OVER()内不指定分区条件时,会基于当前查询的整个结果集(即WHERE UserScore > 30筛选后的所有行)计算最大值,最终每行都会返回这个全局最大值。
  • 数据库只需扫描一次符合WHERE条件的数据,避免了子查询/UNION可能带来的多次表扫描或临时表开销,在大数据集下性能更优。

执行上述SQL后,会得到你期望的结果:

UserIDUserNameUserScoreScoreMax
1John3565
3Chris4065
5Frank4565
4Paul6565

内容的提问来源于stack exchange,提问作者user27823396

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:19:57