Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算和添加Oracle中多列的总计行_Sql_Oracle_Group By_Union - Fatal编程技术网

Sql 计算和添加Oracle中多列的总计行

Sql 计算和添加Oracle中多列的总计行,sql,oracle,group-by,union,Sql,Oracle,Group By,Union,我不熟悉sql和oracle。下面是一个复杂而耗时的查询的结果。 我想计算col2,col3和col4的和。我想在表的末尾添加一行totals 电流输出 id rate rate2 col2 col3 col4 1 2,3 11 10 36 10 1 2,4 2 229,32 36 229,32 1 3 44 229,32 36 229,32 1 4,

我不熟悉sql和oracle。下面是一个复杂而耗时的查询的结果。 我想计算col2,col3和col4的和。我想在表的末尾添加一行totals

电流输出

id  rate rate2 col2      col3  col4
1   2,3  11    10        36     10      
1   2,4  2     229,32    36     229,32      
1   3    44    229,32    36     229,32      
1   4,5  3,4   165,2     36     90,2    
81  1,1  11    30,3      36     30,3        
81  2,3  22    10        36     10      
期望的结果。N代表空

id  rate rate2 col2      col3  col4
1   2,3  11    10        36     10      
1   2,4  2     229,32    36     229,32      
1   3    44    229,32    36     229,32      
1   4,5  3,4   165,2     36     90,2    
81  1,1  11    30,3      36     30,3        
81  2,3  22    10        36     10  
N   N    N     674,14    216    599,14  
我已经做了一些搜索,我能够管理这个使用工会。但是存在性能问题,我正在运行相同的查询,计算总计并追加。底线是我不想两次运行同一个耗时的查询。有没有其他办法来处理这个问题


提前谢谢

最简单的方法可能是使用union all:

然后,分组集是另一个选项:

group by grouping sets ( (id, rate, rate2), () )

最简单的方法可能是使用union all:

然后,分组集是另一个选项:

group by grouping sets ( (id, rate, rate2), () )
您可以使用CTE和MATERIALIZE提示获取所需的输出,如下所示:

with cte as (SELECT /*MATERIALIZE*/ <your query after select>)
select c.*
  from cte c
union all
select null, null, null, sum(col2), sum(col3), sum(col4)
  from cte;
未记录的物化提示使用全局临时表,因此不会或几乎不会对性能产生影响

干杯

您可以使用CTE和MATERIALIZE提示获取所需的输出,如下所示:

with cte as (SELECT /*MATERIALIZE*/ <your query after select>)
select c.*
  from cte c
union all
select null, null, null, sum(col2), sum(col3), sum(col4)
  from cte;
未记录的物化提示使用全局临时表,因此不会或几乎不会对性能产生影响

干杯