我想从特定列中获取最大整数,不包括永远为最大值的值(如果存在)。数据可能如下所示:
score, empid
1 3
3 3
10 3
1 5
2 5
1 8
2 8
3 8
10 8
在上面,我希望MAX得分低于10. MAX(得分)在这种情况下不起作用,因为它会带回10.结果应该是这样的:
score, empid
3 3
2 5
3 8
有什么建议吗?
答案 0 :(得分:9)
这是另一种方法:
SELECT
MAX(CASE WHEN score = 10 THEN NULL ELSE score END) AS [max_score],
empid
FROM
table
GROUP BY
empid
如果您希望避免使用子选项,这可能更为可取。
答案 1 :(得分:7)
select max(score) , empid
from table
where score < (select max(score) from table )
group by empid
答案 2 :(得分:0)
关注Ben English&#39; answer,如果只排除1个值,您也可以使用NULLIF来减少输入。
SELECT MAX(NULLIF(score, 10)), ...
FROM ...
GROUP BY ...
使用CASE WHEN
可以排除一系列值。在这里,我们排除了超过10的所有分数:
SELECT MAX(CASE WHEN score > 10 THEN NULL ELSE score), ...
FROM ...
GROUP BY ...
这是IIF
版本,用于减少输入:
SELECT MAX(IIF(score > 10, NULL, score)), ...
FROM ...
GROUP BY ...