SQL- 如何获得多列的最大值,但我只有 1 行

SQL- How to get MAX value with multiple columns BUT I only have 1 row

我正在尝试获取仅 1 行(多列)的最大值。我看过的所有教程都是针对多行的。

如何返回最大值(4943)? 谢谢!

AFAIK SQL 服务器(屏幕截图看起来像 SMSS,如果您使用的是 SQL 服务器或 DBMS 的标签,请在您的问题中添加 SQL 服务器标签're actually using) 对此没有任何作用。您需要编写自己的函数或使用类似于 CASE ... END

SELECT CASE
         WHEN pop_under >= pop_10_to
              AND pop_under >= pop_20_to
              ...
              AND pop_under >= pop_80_p
           THEN pop_under
         WHEN pop_10_to >= pop_under
              AND pop_10_to >= pop_20_to
              ...
              AND pop_10_to >= pop_80_p
           THEN pop_10_to
         ...
         WHEN pop_80_p >= pop_under
              AND pop_80_p >= pop_10_to
              ...
              AND pop_80_p >= pop_70_to
           THEN pop_80_p
        END greatest
      FROM elbat;

(可以而且应该在这里和那里进行改进(例如处理 NULLs),这只是为了演示这个想法。)

显然,如果可能的话,这个 table 应该规范化为更合适的 table 结构,这样就不会出现这个问题,例如

CREATE TABLE Test
(
   [Id] INT IDENTITY(1, 1)
   [Pop] INT,
   [From] INT,
   [To] INT
)

这会使解决方案变得微不足道。

但是,使用当前结构,我们可以通过使用 UNPIVOT 运算符来解决这个问题。假设上面的 table 称为 test,并且有 4 个类似类型的列称为 p1, p2, p3, p4。 然后下面的查询将完成请求

SELECT MAX(pop) 
FROM (SELECT * FROM test WHERE Id = [InsertIdHere]) AS TableFilteredToDesiredOneRow
UNPIVOT
(
    pop
    FOR ThePs IN (p1, p2, p3, p4)
) AS U

这消除了对任何容易出错的大型条件块的需求。