我想做的是选择 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) 从表 按类名分组
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)