關於資料庫排名函式的使用

2021-06-09 11:29:41 字數 3316 閱讀 7878

1、oracle

(1)、row_number

該函式的功能是為查詢出來的每一行記錄生成乙個序號。(如果有相同的也會分出個先後排名)

select dept.dname,ename,sal,

row_number() over( partition by emp.deptno order by sal) rankorder

from emp

inner join dept on dept.deptno=emp.deptno

where 1=1

order by emp.deptno;

accounting miller 1300 1

accounting clark 2450 2

accounting king 5000 3

research smith 1100 1

research adams 1100 2

research jones 2975 3

research ford 3000 4

research scott 3000 5

sales james 950 1

sales martin 1250 2

sales ward 1250 3

sales turner 1500 4

sales allen 1600 5

sales blake 2850 6

partition by進行分組,這裡按部門編碼進行分組,order by進行排序,這裡按人員的薪水排序

(2)、rank

rank函式考慮到了over子句中排序字段值相同的情況,也就是說如果有兩個第一名,那麼後面就直接第三名了:

select dept.dname,ename,sal,

rank() over( partition by emp.deptno order by sal) rankorder

from emp

inner join dept on dept.deptno=emp.deptno

where 1=1

order by emp.deptno;

accounting miller 1300 1

accounting clark 2450 2

accounting king 5000 3

research smith 1100 1

research adams 1100 1

research jones 2975 3

research ford 3000 4

research scott 3000 4

sales james 950 1

sales martin 1250 2

sales ward 1250 2

sales turner 1500 4

sales allen 1600 5

sales blake 2850 6

partition by進行分組,這裡按部門編碼進行分組,order by進行排序,這裡按人員的薪水排序(這裡research部門就出現該情況了)

(3)、dense_rank

dense_rank函式的功能與rank函式類似,只是在生成序號時是連續的,而rank函式生成的序號有可能不連續。(也就是說,如果有兩個第一名,下乙個還是第二名)

select dept.dname,ename,sal,

dense_rank() over( partition by emp.deptno order by sal) rankorder

from emp

inner join dept on dept.deptno=emp.deptno

where 1=1

order by emp.deptno;

accounting miller 1300 1

accounting clark 2450 2

accounting king 5000 3

research smith 1100 1

research adams 1100 1

research jones 2975 2

research ford 3000 3

research scott 3000 3

sales james 950 1

sales martin 1250 2

sales ward 1250 2

sales turner 1500 3

sales allen 1600 4

sales blake 2850 5

partition by進行分組,這裡按部門編碼進行分組,order by進行排序,這裡按人員的薪水排序(這裡research部門就出現該情況了)

(4)、ntile

ntile函式可以對序號進行分組處理。這就相當於將查詢出來的記錄集放到指定長度的陣列中,每乙個陣列元素存放一定數量的記錄。

select dept.dname,ename,sal,

ntile(2) over( partition by emp.deptno order by sal) rankorder

from emp

inner join dept on dept.deptno=emp.deptno

where 1=1

order by emp.deptno;

accounting miller 1300 1

accounting clark 2450 1

accounting king 5000 2

research smith 1100 1

research adams 1100 1

research jones 2975 1

research ford 3000 2

research scott 3000 2

sales james 950 1

sales martin 1250 1

sales ward 1250 1

sales turner 1500 2

sales allen 1600 2

sales blake 2850 2

partition by進行分組,這裡按部門編碼進行分組,order by進行排序,這裡對資料分為2組

在oracle中還有乙個rownum的東東,也可以產生唯一的序號,常用來進行分頁排序,這裡不再詳細說明

資料庫排名

根據db engines的排行榜,本文列舉了排名前十的資料庫,讓我們一起看看哪些資料庫榜上有名。本排名根據db engines的排行榜得來,該排行榜從人氣上分析了市場上200個不同的資料庫,這裡一覽top 10。oracle mysql及microsoft sql server一直以絕對的優勢霸佔著...

關於資料庫的函式

mid database from 1 for 1 mid databse 1,1 在資料庫中字元型字段中條件值為false可以獲取全部資料 資料庫一般有三種報錯 1 extractvalue 中第乙個為錯誤引數就會錯誤報出第二個引數語句 2 floor rand 0 2 插入虛擬表時出現鍵相同,導...

資料庫產品排名

01 資料庫排名 db engines排名一定準確?可以看到上面這份排名和以往看到的db engines排名不太一樣,名單中資料庫整體數量較少,這裡列出了50個資料庫產品,同時對國產資料庫多了較為詳細的排名,這份排名來自墨天輪2019年9月4日16 05的統計。一直以來db engines是dba較...