sql - SQL Server 中是否有像 .NET 中的 Math.Max 一样接受两个值的 Max 函数?

标签 sql sql-server max

我想编写这样的查询:

SELECT o.OrderId, MAX(o.NegotiatedPrice, o.SuggestedPrice)
FROM Order o

但这不是 MAX 函数的工作原理,对吗?它是一个聚合函数,因此它需要一个参数,然后返回所有行的最大值。

有人知道如何按照我的方法做吗?

最佳答案

如果您使用的是 SQL Server 2008(或更高版本),那么这是更好的解决方案:

SELECT o.OrderId,
       (SELECT MAX(Price)
        FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o

所有功劳和投票均应发送至 Sven's answer to a related question, "SQL MAX of multiple columns?"
我说这是“最佳答案”,因为:

  1. 它不需要使用 UNION、PIVOT、 UNPIVOT、UDF 和超长的 CASE 语句。
  2. 它不会受到处理 null 的问题的困扰,它可以很好地处理它们。
  3. 可以轻松地将“MAX”替换为“MIN”、“AVG”或“SUM”。您可以使用任何聚合函数来查找许多不同列的聚合。
  4. 您不限于我使用的名称(即“AllPrices”和“Price”)。您可以选择自己的名字,以便下一个人更容易阅读和理解。
  5. 您可以使用 SQL Server 2008 的 derived_tables 查找多个聚合像这样:
    SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6), (7, 8), (9, 10) ) AS MyTable(a, b)

关于sql - SQL Server 中是否有像 .NET 中的 Math.Max 一样接受两个值的 Max 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124417/

相关文章:

python - PyTorch Torch.max在多个维度上

多列的 SQL 检查约束

java - 启动时加载 SQL 数据

SQL 触发器无法正常工作

sql-server - Visual Studio BI 工具错误

python - 对连续的非连续切片进行 Numpy 缩减

mysql where id = 与 where id IN() 之间的性能差异

php - mysqli_insert_id 的问题

sql-server - 将 NVARCHAR(255) 转换为 DATE

java - Java 方法的最大大小