我知道尝试在没有 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,但事实证明对于我们的大型数据集来说都太慢了。
使用,
SELECT UserID,
UserName,
UserScore,
MAX(UserScore) OVER () AS ScoreMax
FROM Users
WHERE UserScore > 30
ORDER BY UserScore
参见示例