【问题标题】: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 ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-03-24
          • 2010-09-24
          • 1970-01-01
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多