在 SQL 中选择多个字段的最大值的最佳方法是什么?

all*_*ode 2 sql

我想做的是选择 max(f1, f2, f3)。我知道这行不通,但我认为我想要的应该很清楚(请参阅更新 1)。

我正在考虑执行 select max(concat(f1, '--', f2 ...)) ,但这有各种缺点。特别是,执行 concat 可能会减慢速度。获得我想要的东西的最佳方式是什么?

更新1:到目前为止我得到的答案并不是我想要的。max 处理一组记录,但它仅使用一个值来比较它们;我希望 max 考虑多个值,就像 order by 可以考虑多个值一样。

更新2:假设我有下表:

id 类名 order_by1 order_by_2
 1 个 0 0
 2 个 0 1
 3b 1 0
 4b 0 9

我想要一个按类名对记录进行分组的查询。order_by1然后,在每个“类”中,选择先升序排列的记录order_by2。结果集将包含记录 2 和 3。在我神奇的查询语言中,它看起来像这样:

选择 max(* order by order_by1 ASC, order_by2 ASC)
从表
按类名分组

Ada*_*Dev 6

Select max(val)
From
(
  Select max(fld1) as val FROM YourTable
  union
  Select max(fld2) as val FROM YourTable
  union
  Select max(fld3) as val FROM YourTable
) x
Run Code Online (Sandbox Code Playgroud)

编辑:另一种选择是:

SELECT
    CASE 
        WHEN MAX(fld1) >= MAX(fld2) AND MAX(fld1) >= MAX(fld3) THEN MAX(fld1)
        WHEN MAX(fld2) >= MAX(fld1) AND MAX(fld2) >= MAX(fld3) THEN MAX(fld2)
        WHEN MAX(fld3) >= MAX(fld1) AND MAX(fld3) >= MAX(fld2) THEN MAX(fld3)
    END AS MaxValue
FROM YourTable
Run Code Online (Sandbox Code Playgroud)