【问题标题】:In SQL, are there non-aggregate min / max operators在 SQL 中,是否有非聚合最小/最大运算符
【发布时间】:2011-11-28 15:09:53
【问题描述】:

有没有类似的

select max(val,0)
from table

我不想找到整个表格的最大值

一定有比这更简单的方法吧?

select case when val > 0 then val else 0 end
from table

编辑:我正在使用 Microsoft SQL Server

【问题讨论】:

  • 在 Fortran 中,MAX(a, b, ...) 做了你想要的。在SQL中,一些方言支持LARGERSMALLERLARGESTSMALLEST等函数。任务 AFAIK 没有标准功能。
  • 当心可怕的 NULL。您是否需要:CASE WHEN val IS NULL THEN 0 WHEN val > 0 THEN val ELSE 0 END(用于已知 0 不为空的情况),或CASE WHEN val1 IS NULL THEN val2 WHEN val2 IS NULL THEN val1 WHEN val1 > val2 THEN val1 ELSE val2 END 用于MAX(val1, val2)
  • 它看起来确实像复制品。抱歉,我在搜索时没有找到该线程。模组,请随意删除。

标签: sql sql-server


【解决方案1】:

函数 GREATESTLEAST 不是 SQL 标准,但在许多 RDBMS(例如 Postgresql)中。所以

SELECT GREATEST(val, 0) FROM mytable;

【讨论】:

  • 谢谢,点赞。我正在运行 Microsoft SQL Server。所以看起来那些不存在:(。
【解决方案2】:

不在 SQL 中本身。但是许多数据库引擎定义了一组可以在 SQL 语句中使用的函数。不幸的是,它们通常使用不同的名称和参数列表。

在 MySQL 中,函数是 GREATEST。在 SQLite 中,它是 MAX(一个或多个参数的工作方式不同)。

【讨论】:

    【解决方案3】:

    使其成为基于集合的 JOIN?

    SELECT
       max(val)
    FROM
    (
    select val
    from table
    UNION ALL
    select 0
    ) foo
    

    这避免了另一个问题中建议的标量 udf 可能更适合

    【讨论】:

      【解决方案4】:

      您在 SQL 中拥有的甚至不是有效的 SQL。这不是 MAX 在 SQL 中的工作方式。在 T-SQL 中,MAX 在返回最大值的范围内聚合。您想要的只是两个的较大值。

      阅读本文了解更多信息:

      Is there a Max function in SQL Server that takes two values like Math.Max in .NET?

      【讨论】:

        猜你喜欢
        • 2017-08-31
        • 2021-01-04
        • 2014-12-06
        • 2012-02-26
        • 2021-05-12
        • 1970-01-01
        • 1970-01-01
        • 2019-08-03
        • 2022-09-22
        相关资源
        最近更新 更多