如何在SQL中查询每个合同对应多列数值的行最大值
SQL实现行级多字段最大值计算方案
方案1:使用主流数据库支持的GREATEST函数
大多数主流数据库(MySQL 5.0+、PostgreSQL、Oracle、SQL Server 2022+、BigQuery等)都内置了GREATEST函数,专门用于计算多个表达式的行内最大值,直接查询即可得到所需结果:
-- MySQL/PostgreSQL 写法,带空格的字段名用反引号/双引号包裹 SELECT Contract, `value 1`, `Value 2`, `Value 3`, `Value 4`, GREATEST(`value 1`, `Value 2`, `Value 3`, `Value 4`) AS Maxvalue FROM 你的实际表名;
-- SQL Server 写法,带空格的字段名用方括号包裹 SELECT Contract, [value 1], [Value 2], [Value 3], [Value 4], GREATEST([value 1], [Value 2], [Value 3], [Value 4]) AS Maxvalue FROM 你的实际表名;
方案2:兼容低版本数据库的CASE WHEN写法
如果使用的是不支持GREATEST的低版本数据库(如SQL Server 2022之前的版本),可以通过多分支条件判断实现:
SELECT Contract, [value 1], [Value 2], [Value 3], [Value 4], CASE WHEN [value 1] >= [Value 2] AND [value 1] >= [Value 3] AND [value 1] >= [Value 4] THEN [value 1] WHEN [Value 2] >= [Value 3] AND [Value 2] >= [Value 4] THEN [Value 2] WHEN [Value 3] >= [Value 4] THEN [Value 3] ELSE [Value 4] END AS Maxvalue FROM 你的实际表名;
可选:永久新增Maxvalue存储列
如果需要把该列永久保存到表结构中,可以新增生成列(以MySQL为例):
ALTER TABLE 你的实际表名 ADD COLUMN Maxvalue INT GENERATED ALWAYS AS (GREATEST(`value 1`, `Value 2`, `Value 3`, `Value 4`)) STORED;
内容的提问来源于stack exchange,提问作者Nam Nguyen
相关产品推荐
相关产品推荐

