一 Oracle分析函式入門

2021-06-23 05:40:42 字數 3060 閱讀 9069

分析函式是什麼?

分析函式是oracle專門用於解決複雜報表統計需求的功能強大的函式,它可以在資料中進行分組然後計算基於組的某種統計值,並且每一組的每一行都可以返回乙個統計值。

分析函式和聚合函式的不同之處是什麼?

普通的聚合函式用group by分組,每個分組返回乙個統計值,而分析函式採用partition by分組,並且每組每行都可以返回乙個統計值。

分析函式的形式

分析函式帶有乙個開窗函式over(),包含三個分析子句:分組(partition by), 排序(order by), 視窗(rows) ,他們的使用形式如下:over(partition by *** order by yyy rows between zzz)。

注:視窗子句在這裡我只說rows方式的視窗,range方式和滑動視窗也不提

分析函式例子(在scott使用者下模擬)

示例目的:顯示各部門員工的工資,並附帶顯示該部分的最高工資。

--

顯示各部門員工的工資,並附帶顯示該部分的最高工資。

select e.deptno,

e.empno,

e.ename,

e.sal,

last_value(e.sal)

over(partition by e.deptno

order

by e.sal rows

--unbounded preceding and unbouned following針對當前所有記錄的前一條、後一條記錄,也就是表中的所有記錄

--unbounded:不受控制的,無限的

--preceding:在...之前

--following:在...之後

between unbounded preceding and unbounded following) max_sal

from emp e;

執行結果:

示例目的:按照deptno分組,然後計算每組值的總和

select empno,

ename,

deptno,

sal,

sum(sal) over(partition by deptno order

by ename) max_sal

from scott.emp;

執行結果:

示例目的:對各部門進行分組,並附帶顯示第一行至當前行的彙總

select empno,

ename,

deptno,

sal,

--注意rows between unbounded preceding and current row 是指第一行至當前行的彙總

sum(sal) over(partition by deptno

order

by ename

rows between unbounded preceding and

current row) max_sal

from scott.emp;

執行結果:

示例目標:當前行至最後一行的彙總

select empno,

ename,

deptno,

sal,

--注意rows between current row and unbounded following 指當前行到最後一行的彙總

sum(sal) over(partition by deptno

order

by ename

rows between

current row and unbounded following) max_sal

from scott.emp;

執行結果:

--注意rows between 1 preceding and current row 是指當前行的上一行(rownum-1)到當前行的彙總

sum(sal) over(partition by deptno

order

by ename rows

between

1 preceding and

current row) max_sal

from scott.emp;

執行結果:

--注意rows between 1 preceding and 1 following 是指當前行的上一行(rownum-1)到當前行的下輛行(rownum+2)的彙總

sum(sal) over(partition by deptno

order

by ename

rows between

1 preceding and

2 following) max_sal

from scott.emp;

執行結果:

一 Oracle分析函式入門

分析函式是什麼?分析函式是oracle專門用於解決複雜報表統計需求的功能強大的函式,它可以在資料中進行分組然後計算基於組的某種統計值,並且每一組的每一行都可以返回乙個統計值。分析函式和聚合函式的不同之處是什麼?普通的聚合函式用group by分組,每個分組返回乙個統計值,而分析函式採用partiti...

oracle分析函式

oracle分析函式 sql plus環境 1 group by子句 create test table and insert test data.create table students id number 15,0 area varchar2 10 stu type varchar2 2 sc...

Oracle 分析函式

分析函式提供了跨行,多層級聚合引用值的能力,並且可以在資料子集中控制排序粒度。與聚合函式不同,分析函式並不將結果集聚合較少的行。分析函式是在主查詢結果的基礎上進行一定的分析,如分部門彙總,分部門求均值等等。分析函式的模式 function arg1,arg2,arg3.argn over parti...