CASE WHEN 减少表查询次数

本文通过一个案例,展示了如何使用CASE WHEN语句优化SQL查询,将原本50秒的查询时间降低,以提高数据库性能。对于初学者来说,这是一个理解SQL优化和CASE WHEN用法的良好示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个刚进群的朋友求助一个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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值