一个刚进群的朋友求助一个SQL优化,虽然也发了执行计划,但是看了一下SQL,感觉没必要再看执行计划了。
原SQL:
select f.provname as "省份", --f表
f.a1 as "县", --a表
nvl(c1, 0) as "测站总数", --b表
nvl(c2, 0) as "报汛测站", --c表
nvl(c2 / c1 * 100, 0) || '%' as "到报率", --b表除以c表
nvl(c4, 0) as "1~5次", --e表
nvl(c6, 0) as "6~20次", --h表
nvl(c2, 0) - nvl(c6, 0) - nvl(c4, 0) as ">20次", --c表 - h表 - e表
nvl(c1, 0) - nvl(c2, 0) as "2014年未报汛", --b表 - c表
nvl(c5, 0) as "从未报汛" -- g表
from (select substr(adcd, 1, 2) adcd, count(adcd) a1,max(provname) provname
from tb_project_county@cwfclink
group by substr(adcd, 1, 2)) f, --县
(select substr(a.addvcd, 1, 2) adcd, count(stcd) c1
from st_stbprp_b a, tb_project_county@cwfclink b
where frgrd = 5
and length(addvcd) = 6
and sttp in ('PP', 'ZZ', 'RR', 'pp', 'zz', 'rr')
and a.addvcd = substr(b.adcd, 1, 6)
and a.addvcd