问问题
359 次
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 回答