SQL-如何获得多列的最大值,但我只有一行
我正在尝试只获取一行(多列)的最大值。我看过的所有教程都是针对多行的 如何返回最大值(4943)? 谢谢 AFAIK SQL Server(屏幕截图看起来像SMS,如果您使用的是SQL Server,请在问题中添加SQL Server标记,或者您实际使用的DBMS的标记)没有此功能。您需要编写自己的函数或使用SQL-如何获得多列的最大值,但我只有一行,sql,max,sql-order-by,union,Sql,Max,Sql Order By,Union,我正在尝试只获取一行(多列)的最大值。我看过的所有教程都是针对多行的 如何返回最大值(4943)? 谢谢 AFAIK SQL Server(屏幕截图看起来像SMS,如果您使用的是SQL Server,请在问题中添加SQL Server标记,或者您实际使用的DBMS的标记)没有此功能。您需要编写自己的函数或使用案例。。。结束类似于: SELECT CASE WHEN pop_under >= pop_10_to AND pop_under >
案例。。。结束
类似于:
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),这只是为了演示这个想法。)显然,如果可能,应该将该表规范化为一个更合适的结构,在该结构中不会出现此问题,例如
CREATE TABLE Test
(
[Id] INT IDENTITY(1, 1)
[Pop] INT,
[From] INT,
[To] INT
)
这将使解决方案变得微不足道
然而,使用当前的结构,我们可以通过使用操作符来解决这个问题。假设上面的表名为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
这消除了对任何容易出现bug的大型条件块的访问需求