oracle中的開窗函式理解

2021-08-31 15:26:18 字數 1186 閱讀 7880

開窗函式指定了分析函式工作的資料視窗大小,這個資料視窗大小可能會隨著行的變化而變化,舉例如下:

over(order by salary) 按照salary排序進行累計,order by是個預設的開窗函式

over(partition by deptno)按照部門分割槽

over(order by salary range between 50 preceding and 150 following)

每行對應的資料視窗是之前行幅度值不超過50,之後行幅度值不超過150

over(order by salary rows between 50 preceding and 150 following)

每行對應的資料視窗是之前50行,之後150行

over(order by salary rows between unbounded preceding and unbounded following)

每行對應的資料視窗是從第一行到最後一行,等效:

over(order by salary range between unbounded preceding and unbounded following)

eg.

select * from

( select p.deal_no,p.step_id,p.charge_id,p.dr_acc_no,

sum(p.dr_origin_amt)

over (partition by p.deal_no,p.step_id,p.dr_acc_no order by p.charge_id) as a,

dense_rank()

over (partition by p.deal_no,p.step_id,p.dr_acc_no order by p.charge_id) as b

from ixqdbaci p

where p.entity='002' and p.charge_id not like '99%'

and p.deal_no like '00779010010612%'

) where b=1

sum中的over()加上order by後會變成遞增累加,而不是分組的所有值sum,所以在這條sql中應該把a列的oder by p.charge_id刪除,b列的dense_rank是為了區分同一組的不同行,並且order by是不可少的。

oracle開窗函式

1.使用row number分頁,查詢第1 10條資料 select t.custid,t.companyname,t.address,t.city from select row number over order by custid as rownum,custid,companyname,ad...

陣列中的reduce 函式理解

第一次見到reduce 是在js 的高階程式設計中,它的意思是把乙個陣列減少為乙個數,舉的例子是陣列中元素的求和。它接受乙個函式作為引數,函式又有兩個引數,乙個是prev,前乙個值,乙個是next,後乙個值,然後函式體就是返回相加的值。let array 1,3,5 let sum array.re...

Python中函式引數理解

python中函式定義主要包含4類引數 1 必選引數 2 預設引數 3 可變引數 4 關鍵字引數 def power x x 必選引數 return x 2def power x,n 2 n 預設引數 return x n即傳入的引數個數是可變的。def calc numbers numbers 可...