MYSQL 返回带有附加列的所有行作为集合的最大值,而不进行分组

问题描述 投票:0回答:1

我知道尝试在没有 GROUP BY 的情况下获取 MAX 值很奇怪,但也许有一种方法可以满足我的需要。

假设我有下表...

用户ID 用户名 用户评分
1 约翰 35
2 史蒂夫 20
3 克里斯 40
4 保罗 65
5 弗兰克 45

我需要做的是返回分数> 30的所有行,但我还需要知道该结果集中的最大值是多少。我的实际 WHERE 子句有点复杂,因此我需要避免重复 WHERE 部分,或查询数据两次以获得答案。

我的理想场景/伪查询...

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

结果集看起来像这样...

用户ID 用户名 用户评分 最高得分
1 约翰 35 65
3 克里斯 40 65
5 弗兰克 45 65
4 保罗 65 65

然后我可以在任何时候在行级别引用 ScoreMax。

尝试过子查询和 UNION,但事实证明对于我们的大型数据集来说都太慢了。

sql mysql
1个回答
0
投票

使用,

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

参见示例

© www.soinside.com 2019 - 2024. All rights reserved.