oracel读取同一个字段在不同状态下的聚合

如标题

例如 我要读取A表里的a字段,

分别是1-6月sum(a),7-12sum(a),小于今年的sum(a).

也就是不同时间段下sum(a)的值。

我原本left join A 三次,只是时间限制不一样。

由于A表数据上千条,导致left join 三次过后运行时间多了不少。怎么优化

吴浩 发布于 2019-7-29 17:04
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
1
dongf.jiaLv4见习互助
发布于2019-7-29 19:10

select
sum(case when to_char (date_time,'mm') between 1 and 6 then a else 0 end) as one_six_mon,
sum(case when to_char (date_time,'mm') between 7 and 12 then a else 0 end) as sev_twe_mon,
sum(case when to_char (date_time,'yyyy') < 2019 then a else 0 end) as less_than_year
from A;

最佳回答
1
firegunzxLv6高级互助
发布于2019-7-29 17:09

写3个视图

最佳回答
0
Chris陈瑜Lv1见习互助
发布于2019-7-29 17:10

可否考虑建立索引,有试过吗

  • 吴浩 吴浩(提问者) 数据不是很多,我也不会写索引。我的意思是在sql本身上怎么优化
    2019-07-29 17:18 
  • Chris陈瑜 Chris陈瑜 回复 吴浩(提问者) left join 是肯定耗时的,可以的话把sql发上来看看,具体情况具体分析
    2019-07-29 18:30 
最佳回答
0
doudekaixinLv6中级互助
发布于2019-7-29 18:23

这数据也不是很多。

你的结果是要sum值,那你完全可以先SUM做成虚拟表,再去join

最佳回答
0
KerydiaLv5中级互助
发布于2019-7-29 21:09

直接使用case when  不用left join 3次

最佳回答
0
hippomenes157Lv3见习互助
发布于2019-7-30 09:23

case

  • 7关注人数
  • 528浏览人数
  • 最后回答于:2019-7-30 09:23
    请选择关闭问题的原因
    确定 取消
    返回顶部