mm_2008_626688 2009-05-08 11:47
浏览 173
已采纳

有关sql的优化

select * from (
select sum(jyje) total_je,xh,xm,xbdm,bjmc,yxmc,zymc from
(
select t.xh,t.xm,t.xbdm ,m.jyrq,m.jyje,t.bjmc,t.yxmc,t.zymc
from v_xs_bzksjbxx t,v_ykt_tjxx m where t.xh=m.xh and to_char(jyrq,'yyyy-MM')<='2009-08' and to_char(jyrq,'yyyy-MM')>='2008-09'
and 1=1 group by (t.xh,t.xm,t.xbdm ,m.jyrq,m.jyje,t.bjmc,t.yxmc,t.zymc)
) group by (xh,xm,xbdm,bjmc,yxmc,zymc)
) where total_je >200
这个语句查询的数据不是很多,但是v_ykt_tjxx中数据至少有26万多数据,并且一直会增加,如何优化这个sql语句,还望大家给点意见,很急。

  • 写回答

2条回答 默认 最新

  • lggegegmail 2009-05-09 02:06
    关注

    你的SQL可以简化,不需要两层group by
    [code="sql"]select *
    from (--select sum(jyje) total_je, xh, xm, xbdm, bjmc, yxmc, zymc
    --from (
    select t.xh,
    t.xm,
    t.xbdm,
    --m.jyrq,
    sum(m.jyje) total_je,
    t.bjmc,
    t.yxmc,
    t.zymc
    from v_xs_bzksjbxx t, v_ykt_tjxx m
    where t.xh = m.xh
    and to_char(jyrq, 'yyyy-MM') <= '2009-08'
    and to_char(jyrq, 'yyyy-MM') >= '2008-09'
    and 1 = 1
    group by (t.xh, t.xm, t.xbdm, --m.jyrq, m.jyje,
    t.bjmc, t.yxmc, t.zymc)--)
    --group by (xh, xm, xbdm, bjmc, yxmc, zymc)
    )
    where total_je > 200[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置