使用groupby子句优化oracle查询

使用groupby子句优化oracle查询,oracle,performance,group-by,hints,Oracle,Performance,Group By,Hints,我有一个表,每个键有很多成本列 表 SK1 SK2 Col1 Col2 Col3。。。。。Col50液位(是/否) 我需要对所有值进行聚合(求和),然后用Y检查是否有任何值,然后将它们添加到新表b中。 在这里,应该返回(sk1,sk2)的记录组合(1,2) 我编写的查询是选择所有col的lisr并添加为groupby。 我们有大量数据,因此此查询运行时间太长。有没有机会重新了解这一点,并这样做,它可以变得更快 挑选 Sk1, Sk2, nvl(总和(col3),0), nvl(总和(col4)

我有一个表,每个键有很多成本列 表

SK1 SK2 Col1 Col2 Col3。。。。。Col50液位(是/否)


我需要对所有值进行聚合(求和),然后用Y检查是否有任何值,然后将它们添加到新表b中。 在这里,应该返回(sk1,sk2)的记录组合(1,2)

我编写的查询是选择所有col的lisr并添加为groupby。 我们有大量数据,因此此查询运行时间太长。有没有机会重新了解这一点,并这样做,它可以变得更快

挑选 Sk1, Sk2, nvl(总和(col3),0), nvl(总和(col4))0, ..... nvl(总和(col50)) 从表A Sk1分组, Sk2


Iam将此用作大型查询的一部分,而许多其他计算都是在此基础上执行的。

如果您将此用作大型查询的一部分,是否尝试使用此选项

可能是这样

WITH SUM_DATA AS (select col1, col2, nvl(sum(col3),0), nvl(sum(col4))0, ..... nvl(sum(col50)) from table A group by col1, col2)

SELECT xyz 
FROM abc, sum_data
WHERE abc.join_col = sum_data.join_col

更多信息

确定一组分组记录中是否有任何记录包含“Y”将非常简单

select   ...
from     ...
group by ...
having   max(flg) = 'Y'

目前,我已经创建了一个临时表,并已将所有数据加载到其中。

您的问题是?我已经编辑了我的问题。。如果您需要更多详细信息,请告诉我。如果WITH子句只被引用一次,为什么WITH子句会有帮助?这将只给我那些有Y的值,我必须计算所有值的总和,然后只显示或占用那些有Y的值。having子句在应用聚合后对查询结果应用过滤器,而不是对输入行应用过滤器。因此,它将返回源行flg的最大值为“Y”的所有聚合行。
select   ...
from     ...
group by ...
having   max(flg) = 'Y'