最近做數據分析,需要用到累加功能,發現強大的oracle還真有,用over(order by field)
例子:

數據表中最后一列就是累加的效果
(1)累加sql:
select t.acc_pedal_pos,count(*) num,sum(count(*)) over(order by t.acc_pedal_pos) accu_sum from GT1117CARDATA t where t.acc_pedal_pos>0 group by t.acc_pedal_pos order by t.acc_pedal_pos
#(自己這里加個感慨:感覺Oracle還有很多隱藏功能,比如這個sum()+over()用法,很神奇,我在sql數據庫中也遇到了類似問題,用的是定義變量+case when用法,可以去我的SQL文章里去找一下,也有記錄,就是不知道,是不是SQL也有類似於Oracle的sum+over快捷用法)
(2)根據累計求和,進一步求累計值占總和的百分比sql:
select t1.*,round(t1.accu_sum/t2.allsum*100,2)||'%' from (select t.acc_pedal_pos,
count(*) num,
sum(count(*)) over(order by t.acc_pedal_pos) accu_sum
from GT1117CARDATA t
where t.acc_pedal_pos > 0
group by t.acc_pedal_pos
order by t.acc_pedal_pos)t1,(select count(acc_pedal_pos) allsum from GT1117CARDATA where acc_pedal_pos>0) t2

以上的內容是參考了:https://www.cnblogs.com/yuwenfeng/p/4235632.html
下邊上個例子——不計算累計,直接應用了上邊的第(2)步,計算占整體比:
結果:

腳本:占比=t1是統計專區的線索數量(利用了專區列,count(*)+group by 專區) / t2是不區分專區,進行整體的線索數量統計(利用了count(*))





