如何编写SQL查询创建临时表以获取多列最大值?
解决方案
不需要使用pivot表,你的需求是从多列中提取最大值,用聚合函数或条件判断就能实现,以下是不同数据库下创建临时表的查询语句:
MySQL/PostgreSQL
CREATE TEMPORARY TABLE temp_max_jump AS SELECT name, GREATEST(jump1, jump2, jump3) AS jump FROM your_table_name;
这两个数据库的GREATEST函数会自动忽略null值,直接返回非空列中的最大值,完全匹配你的需求。
Oracle
CREATE GLOBAL TEMPORARY TABLE temp_max_jump ON COMMIT PRESERVE ROWS AS SELECT name, GREATEST(jump1, NVL(jump2, jump1), NVL(jump3, jump1)) AS jump FROM your_table_name;
Oracle的GREATEST函数遇到null会返回null,所以用NVL将空值替换为必存在的jump1(符合你给出的规则:前序列不会空),确保能正确取到最大值。
SQL Server
CREATE TABLE #temp_max_jump ( name VARCHAR(50), jump INT ); INSERT INTO #temp_max_jump SELECT name, (SELECT MAX(jump_val) FROM (VALUES (jump1), (jump2), (jump3)) AS vals(jump_val)) AS jump FROM your_table_name;
SQL Server无原生GREATEST函数,可通过子查询将多列转为行数据,再用MAX函数取最大值。
核心逻辑说明
利用最大值函数直接从jump1/jump2/jump3中提取最大非空值,完全适配你给出的“前序列无空值”规则,比pivot表更简洁高效。
内容的提问来源于stack exchange,提问作者Khanh Hua
相关产品推荐
相关产品推荐

