我想把这4个查询合并成一个查询:
select SUM(AMOUNT) as TOTAL_AMOUNT
from PAYMENT;
select SUM(AMOUNT) as NOT_SETTLED_AMOUNT
from PAYMENT
where STATE = 0;
select SUM(AMOUNT) as SETTLED_AMOUNT
from PAYMENT
where STATE = 1;
SELECT CREATION_DATE
FROM PAYMENT
WHERE PAYMENT_ID = (SELECT max(PAYMENT_ID) from PAYMENT)) as LATEST_PAYMENT_DATE;
SELECT MAX(ID) FROM INQUIRY
4条答案
按热度按时间swvgeqrz1#
您可以使用条件聚合在一次表扫描中执行所有4个计算。关于最新付款id的创建日期,我们可以使用Oracle's
keep
syntax:注意,这比使用子查询和/或联合的其他方法更有效。
fivyi3re2#
一个选择是
UNION
它们。添加另一列,说明什么是什么。
由于所有UNIONed查询必须具有相同的列数和相同的数据类型,并且由于最后一个查询返回
date
值(而其余所有查询都返回数字),因此将它们全部转换为带有to_char
的字符串:ctzwtxfj3#
对于前3个最适合你的是ROLLUP和CASE:
对于创建日期,只需使用UNION ALL,如:Littlefoot说
yhxst69z4#
可以在SUM中使用条件。
如果您可以将最大CREATION_DATE作为最后一个付款日期,而不是查看最后一个ID的CREATION_DATE,那么查询将变得更简单: