我有一个表TABLE_A,有一列。
select VALUE from TABLE_A;
VALUE
---------
1
2
3
4
5
我需要第二列,它会给我第一列的所有值的总和。
预期:
VALUE SUM
--------- ---------
1 15
2 15
3 15
4 15
5 15
我需要在没有子选择查询的情况下执行此操作。(选择代替列)
答案 0 :(得分:2)
只需使用重要的子选项:
select value, (select sum(value) from TABLE_A)
from TABLE_A
或JOIN
:
select t1.value, t2.sum_value
from TABLE_A t1
CROSS JOIN (select sum(value) as sum_value from TABLE_A) t2
Oracle是否支持CROSS JOIN
语法?
答案 1 :(得分:2)
可以使用 SUM()OVER()分析函数轻松完成。
SELECT VALUE,
SUM(VALUE) OVER(ORDER BY NULL) as "SUM"
FROM TABLE_A;
工作演示:
SQL> WITH sample_data AS(
2 -- end of sample_data mocking as real table
3 SELECT 1 VALUE FROM dual UNION ALL
4 SELECT 2 VALUE FROM dual UNION ALL
5 SELECT 3 VALUE FROM dual UNION ALL
6 SELECT 4 VALUE FROM dual UNION ALL
7 SELECT 5 VALUE FROM dual
8 )
9 SELECT VALUE,
10 SUM(VALUE) OVER() as "SUM"
11 FROM sample_data;
VALUE SUM
---------- ----------
1 15
2 15
3 15
4 15
5 15
答案 2 :(得分:0)
只需使用分析功能。正确的表达方式是:
select VALUE, sum(VALUE) over () as "sum"
from TABLE_A;
这是SQL的标准部分,通常比执行相同计算的其他方法更有效。