【问题标题】:How to get MAX int but exclude specific int?如何获得 MAX int 但排除特定的 int?
【发布时间】:2012-04-11 18:19:11
【问题描述】:
我想从特定列中获取最大整数,不包括如果存在则始终为最大值的值。数据可能如下所示:
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
有什么建议吗?
【问题讨论】:
标签:
sql
sql-server-2008
tsqlt
【解决方案1】:
这是另一种方法:
SELECT
MAX(CASE WHEN score = 10 THEN NULL ELSE score END) AS [max_score],
empid
FROM
table
GROUP BY
empid
如果您希望避免子选择,这可能更可取。
【解决方案2】:
select max(score) , empid
from table
where score < (select max(score) from table )
group by empid
【解决方案3】:
按照 Ben English 的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 ...