oracle統計函式學習

2021-09-01 17:01:05 字數 3474 閱讀 7284

資料庫準備

create table emp (

deptno int not null,

ename varchar(100) default null,

sal int default null

);insert into emp values (10,'king',5000);

insert into emp values (10,'clark',2450);

insert into emp values (10,'miller',1300);

insert into emp values (20,'scott',3000);

insert into emp values (20,'ford',3000);

insert into emp values (20,'jones',2975);

insert into emp values (20,'adams',1100);

insert into emp values (20,'smith',800);

insert into emp values (30,'blake',2850);

insert into emp values (30,'allen',1600);

insert into emp values (30,'turner',1500);

insert into emp values (30,'ward',1250);

insert into emp values (30,'martin',1250);

insert into emp values (30,'james',950);

1.row_number() 的使用

原表資訊:

select deptno, ename, sal from emp order by deptno, sal desc;

deptno	ename	sal

1 10 king 5000

2 10 clark 2450

3 10 miller 1300

4 20 scott 3000

5 20 ford 3000

6 20 jones 2975

7 20 adams 1100

8 20 smith 800

9 30 blake 2850

10 30 allen 1600

11 30 turner 1500

12 30 ward 1250

13 30 martin 1250

14 30 james 950

使用row_number()查出各部門薪水最高的三個員工姓名、薪水,多於三個的只取三個。

deptno	rw	ename	sal

1 10 1 king 5000

2 10 2 clark 2450

3 10 3 miller 1300

4 20 1 scott 3000

5 20 2 ford 3000

6 20 3 jones 2975

7 30 1 blake 2850

8 30 2 allen 1600

9 30 3 turner 1500

體會:row_number() 返回的主要是「行」的資訊,並沒有按照sal排

名,如

20 1 scott 

3000

2 ford 

3000

scott與ford薪水一樣多,ford前面的2僅僅是行數、記錄條數的感念。

2.rank()、dense_rank

() 的使用

使用rank()查出各部門薪水前三名的員工姓名、薪水。

select *

from (select deptno,

rank() over(partition by deptno order by sal desc) rk,

ename,

salfrom emp)

where rk <= 3

deptno	rk	ename	sal

1 10 1 king 5000

2 10 2 clark 2450

3 10 3 miller 1300

4 20 1 scott 3000

5 20 1 ford 3000

6 20 3 jones 2975

7 30 1 blake 2850

8 30 2 allen 1600

9 30 3 turner 1500

使用dense_rank()查出各部門薪水前三名的員工姓名、薪水。

select *

from (select deptno,

dense_rank() over(partition by deptno order by sal desc) drk,

ename,

salfrom emp)

where drk <= 3

deptno	drk	ename	sal

1 10 1 king 5000

2 10 2 clark 2450

3 10 3 miller 1300

4 20 1 scott 3000

5 20 1 ford 3000

6 20 2 jones 2975

7 20 3 adams 1100

8 30 1 blake 2850

9 30 2 allen 1600

10 30 3 turner 1500

oracle統計函式(一)--rank和dense_rank

分類:oracle資料庫

聚合函式rank 和 dense_rank 主要的功能是計算一組數值中的排序值。

在9i版本之前,只有分析功能(analytic ),即從乙個查詢結果中計算每一行的排序值,是基於order_by_clause子句中的value_exprs指定欄位的。

其語法為:

rank ( ) over ( [query_partition_clause] order_by_clause )

在9i版本新增加了合計功能(aggregate),即對給定的引數值在設定的排序查詢中計算出其排序值。這些引數必須是常數或常值表示式,且必須和order by子句中的字段個數、位置、型別完全一致。

其語法為:

rank ( expr [, expr]... ) within group

( order by

expr [ desc | asc ] [nulls ]

[, expr [ desc | asc ] [nulls ]]...

)

statistics 數學統計函式

statistics 數學統計函式 資源 位置 lib statistixs.py 該模組為數學 限定為實數 資料提供了計算數學統計量的函式。1.平均值與中位值測算 以下的函式可以用於計算總體或樣本的平均值或典型值。mean 資料的算數平均值 harmonix mean 資料的調和平均值 如果存在x...

Oracle 數學函式

round n,m 四捨五入,如果去掉m,則四捨五入到整數,如果m是正數,則四捨五入到小數點的m位,如果是負數,則四捨五入到小數點前。trunc n,m 該函式用於擷取數字。如果去掉m,就擷取小數部分,如果m是正數就擷取到小數點後的m位後,如果是負數,則擷取到小數點之前m位。mod n,m 取摸 f...

oracle 日期函式學習一

時間和日期處理函式 檢索年份是2007的所有 prod end資料 select from products where to number to char prod end,yyyy 2007 select from products where prod end between to date ...