如何获得MAX int但排除特定的int?

时间:2012-04-11 18:19:11

标签: sql sql-server-2008 tsqlt

我想从特定列中获取最大整数,不包括永远为最大值的值(如果存在)。数据可能如下所示:

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

有什么建议吗?

3 个答案:

答案 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 ...