0
4

1 回答 1

3

就像 John Bollinger 评论的那样,您的子查询会针对主查询的每一行进行评估。但是由于您在一个简单的列上进行平均,您可以轻松地将子查询移出 CTE 并计算一次平均值,这应该会大大加快速度:

with name1 as (
  select col1 as a1, col2 as a2, sum(FEE) as a3
  from s1, date
  where return_date = datesk and year = 2000
  group by col1, col2
), avg_a3_by_a2 as (
  select a2, avg(a3) * 1.2 as avg12
  from name1
  group by a2
)
select c_id
from name1, avg_a3_by_a2, ss, cc
where name1.a3 > avg_a3_by_a2.avg12
  and name1.a2 = avg_a3_by_a2.a2
  and s_sk = name1.a2
  and s_state = 'TN'
  and name1.a1 = c_sk
order by c_id
limit 100;

新的 CTE 计算每个不同值的平均值 + 20% a2

还请使用JOIN语法而不是逗号分隔的FROM项目,因为它使您的代码更具可读性。如果您开始在查询中使用别名,请在所有表和列上一致地使用它们。由于缺乏信息,我无法纠正这两个问题。

于 2015-07-09T01:50:23.420 回答