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較...