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;
(可以而且应该在这里和那里进行改进(例如处理 NULL
s),这只是为了演示这个想法。)
显然,如果可能的话,这个 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
这消除了对任何容易出错的大型条件块的需求。
我正在尝试获取仅 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;
(可以而且应该在这里和那里进行改进(例如处理 NULL
s),这只是为了演示这个想法。)
显然,如果可能的话,这个 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
这消除了对任何容易出错的大型条件块的需求。