4

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

score, empid
 1       3
 3       3
 10      3
 1       5 
 2       5
 1       8
 2       8
 3       8
 10      8

在上面,我希望 MAX 分数小于 10。MAX(score) 在这种情况下不起作用,因为它会带回 10。结果应该如下所示:

score, empid
 3       3
 2       5
 3       8

有什么建议么?

4

3 回答 3

9

这是另一种方法:

SELECT
   MAX(CASE WHEN score = 10 THEN NULL ELSE score END) AS [max_score],
   empid
FROM
   table
GROUP BY
   empid

如果您希望避免子选择,这可能更可取。

于 2012-04-11T18:34:06.183 回答
7
select max(score) , empid
from table
where score < (select max(score) from table )
group by empid
于 2012-04-11T18:22:36.933 回答
0

按照 Ben English 的回答,如果您只排除 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 ...
于 2017-10-06T06:07:35.997 回答