Oracle SQL select 两个不同的 select 语句结果的最大值
Oracle SQL select greatest value of the result of two different select statements
我是 运行 select 循环中的语句,使用游标从不同的表中收集数据;
快速(不工作)示例;
select DISTINCT(ordernr) from orders
INSERT INTO newtable (select Crs.ordernr as ordernr, value1 as value from table2 where table2.ordernr = Crs.ordernr );
INSERT INTO newtable (select Crs.ordernr as ordernr, value2 as value from table3 where tabel3.ordernr=Crs.ordernr ;
)
LOOP
END LOOP;
END;
我想要的只是一个插入语句,它只插入两个 select 语句的最大值。
我尝试在我的循环中使用最强大的功能,但我 运行 卡住了。 value1 和 value2
的两种数据类型相同
insert into newtable(select crs.ordernr as ordernr, greatest
(
select value1 as value from table1 where condition=1, select value2 as value from table2 where condition=1)
)
);
是否可以使用 select 案例或其他方式根据条件 return 只有一个值?例如value1或value2的最大值?
您可以使用 greatest
函数并为其提供子查询,但是 - 遵循语法,即将每个子查询(select
语句)括在自己的括号中。
像这样:
SQL> select greatest ( (select max(sal) from emp where job = 'CLERK'),
2 (select max(sal) from emp where job = 'ANALYST')
3 ) greatest_salary
4 from dual;
GREATEST_SALARY
---------------
3450
SQL>
我不知道这是什么:
insert into newtable(select crs.ordernr as ordernr
-----------------------------
应该做的; crs
是什么? from
子句在哪里?
从 Oracle 12 开始,您可以使用:
INSERT INTO newtable (ordernr, value)
SELECT *
FROM (
SELECT Crs.ordernr as ordernr,
value1 as value
FROM table2
WHERE table2.ordernr = Crs.ordernr
UNION ALL
SELECT Crs.ordernr,
value2
FROM table3
WHERE table3.ordernr=Crs.ordernr
)
ORDER BY value DESC
FETCH FIRST ROW ONLY;
这意味着如果您扩展查询以提取更多列并且您想要一列的最高值和其他列的相应值,那么这些值将全部来自具有最高值的那一行。
db<>fiddle here
我是 运行 select 循环中的语句,使用游标从不同的表中收集数据; 快速(不工作)示例;
select DISTINCT(ordernr) from orders
INSERT INTO newtable (select Crs.ordernr as ordernr, value1 as value from table2 where table2.ordernr = Crs.ordernr );
INSERT INTO newtable (select Crs.ordernr as ordernr, value2 as value from table3 where tabel3.ordernr=Crs.ordernr ;
)
LOOP
END LOOP;
END;
我想要的只是一个插入语句,它只插入两个 select 语句的最大值。 我尝试在我的循环中使用最强大的功能,但我 运行 卡住了。 value1 和 value2
的两种数据类型相同insert into newtable(select crs.ordernr as ordernr, greatest
(
select value1 as value from table1 where condition=1, select value2 as value from table2 where condition=1)
)
);
是否可以使用 select 案例或其他方式根据条件 return 只有一个值?例如value1或value2的最大值?
您可以使用 greatest
函数并为其提供子查询,但是 - 遵循语法,即将每个子查询(select
语句)括在自己的括号中。
像这样:
SQL> select greatest ( (select max(sal) from emp where job = 'CLERK'),
2 (select max(sal) from emp where job = 'ANALYST')
3 ) greatest_salary
4 from dual;
GREATEST_SALARY
---------------
3450
SQL>
我不知道这是什么:
insert into newtable(select crs.ordernr as ordernr
-----------------------------
应该做的; crs
是什么? from
子句在哪里?
从 Oracle 12 开始,您可以使用:
INSERT INTO newtable (ordernr, value)
SELECT *
FROM (
SELECT Crs.ordernr as ordernr,
value1 as value
FROM table2
WHERE table2.ordernr = Crs.ordernr
UNION ALL
SELECT Crs.ordernr,
value2
FROM table3
WHERE table3.ordernr=Crs.ordernr
)
ORDER BY value DESC
FETCH FIRST ROW ONLY;
这意味着如果您扩展查询以提取更多列并且您想要一列的最高值和其他列的相应值,那么这些值将全部来自具有最高值的那一行。
db<>fiddle here