2

我有一个名为 TestValue 的表,如下所示

value1  value2  value3
10      19      17
78      8       91

我想获得最大值。我在 SQL 中试过这个查询:

select (select MAX(v) from (values (Value1),(Value2),(Value3)) as value(v)) 
      as Maxvalue 
      from TestValue

结果就像

Maxvalue
19
91

但我希望结果是 only 91

4

5 回答 5

1

解决方案greatest很好,但它取决于特定于数据库的解决方案(例如,据我所知,在 SQL Server 上您没有类似的解决方案greatest),因此您可以使用通用解决方案:

SELECT MAX(v) FROM
(
  SELECT value1 v FROM tab
  UNION ALL
  SELECT value2 v FROM tab
  UNION ALL
  SELECT value3 v FROM tab
)
于 2013-01-07T08:41:56.107 回答
1

MS SQL Server 没有GREATEST函数,但是你可以用一个CASE语句来模拟它:

SELECT MAX(
    CASE
        WHEN value1 > value2 And value1 > value3 THEN value1
        WHEN value2 > value3 THEN value2
        ELSE value3
    END) AS Maxvalue FROM TestValue
于 2013-01-07T08:42:44.903 回答
0

这有效(SQLFiddle):

SELECT max(greatest(value1, value2, value3))
FROM testvalue

编辑: greatest()在所有流行的服务器(MySQL、PostgreSQL、Oracle)上都支持,但在 MSSQL 上不支持。对于 MSSQL 来说,创建存储过程来模拟这个功能是很常见的。

于 2013-01-07T08:33:40.460 回答
0

SQL小提琴

MS SQL Server 2012 架构设置

create table TestValue
(
  value1 int,
  value2 int,
  value3 int
);

insert into TestValue values(10,      19,      17);
insert into TestValue values(78,      8 ,      91);

查询 1

select max(MaxValue) as MaxValue
from
(
  select (select MAX(v) from (values (Value1),(Value2),(Value3)) as value(v)) 
        as Maxvalue 
        from TestValue
) as T

结果

| MAXVALUE |
------------
|       91 |

查询 2

select max(Value) as MaxValue
from TestValue 
unpivot (Value for Col in (Value1, Value2, Value3)) as U

结果

| MAXVALUE |
------------
|       91 |
于 2013-01-07T08:45:01.347 回答
0
select max(max(Value1),max(Value2),max(Value3)) from Persons

在这里测试

于 2013-01-07T09:02:33.570 回答