首先,來構造一些數(shù)據(jù)
成都創(chuàng)新互聯(lián)公司專注于梁山企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設公司,商城系統(tǒng)網(wǎng)站開發(fā)。梁山網(wǎng)站建設公司,為梁山等地區(qū)提供建站服務。全流程按需求定制開發(fā),專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務
drop table test;
create table test
(
name varchar2(10),
account number(5)
);
insert into test values ('張三','5');
insert into test values ('王五','10');
insert into test values ('小二','10');
insert into test values ('李四','20');
insert into test values ('小三','40');
insert into test values ('小四','50');
insert into test values ('小五','90');
insert into test values ('小六','90');
insert into test values ('小七','90');
commit;
下面來看一下一些方式的排名結果:
1.? select??? ?t.*,dense_rank() over(order by t.account asc)?? 排名?? from test t;
2. select? ?t.*,dense_rank() over(order by t.account desc) 排名??? from??test t;
3. select t.*,rank() over(order by t.account asc) 排名 from test t;
4. select t.*,rank() over(order by t.account desc) 排名 from test t;
簡單用法:
rank() over(partition by 分組字段 order by 排序字段)
partition by 分組字段為可選。
oracle里面相關的排序函數(shù):
row_number 排名不并列
rank 排名并列
dense_rank排名并列
集中函數(shù)區(qū)別:
一共四名選手參賽,兩名選手的成績一致,皆為第二名。那么按照不同的算法排名如下:
row_number 1,2,3,4 (2,3的成績一致)
rank 1,2,2,4(沒有第三名)
dense_rank 1,2,2,3
要利用什么函數(shù),首先找出對應的函數(shù)名稱。按字母順序查找以R開頭的,點擊確定。在菜單欄中單擊插入命令的函數(shù),指定的函數(shù)也就是說你要對哪一個數(shù)進行排名,這里選擇的是H2中單元格的總成績。
函數(shù)名后面的參數(shù)中,number為需要求排名的那個數(shù)值或者單元格名稱(單元格內(nèi)必須為數(shù)字),ref 為排名的參照數(shù)值區(qū)域,order的為0和1,默認不用輸入,得到的就是從大到小的排名,若是想求倒數(shù)第幾,order的值請使用1。這里共講到三個參數(shù),需要注意的第三個參數(shù)是可以省略的。
除了選擇插入函數(shù)還可以直接在單元格里面輸入函數(shù)也可以得到同樣的效果。在B2單元格里面先輸入等于號,一般等于號輸入了之后就代表這個單元格里面的是一個公式。
RANK是一個從oracle 8.1.6開始引入的統(tǒng)計函數(shù)。RANK的功能是按照某種分組方式計算出返回結果的排行。RANK函數(shù)有兩個,一個是RANK,另外一個是DENSE_RANK。RANK排序在碰到并列值的時候,下一個排行序號會跳過并列的值,而DENSE_RANK排序的結果有并列排名,下一個排行順序僅僅加一。
oracle查詢排名可以使用排名函數(shù)。
比如:RANK DENSE_RANK
參考語句:
--按照筆試成績進行排名,取出前兩名
select * from
(
SELECT p.writtenExam, i.stuName, i.stuClass,
RANK() OVER ( ORDER BY p.writtenExam desc ) 排名1
,DENSE_RANK() OVER ( ORDER BY p.writtenExam desc) 排名2
FROM stuInfo i
INNER JOIN stuMarks p
ON i.stuNo = p.stuNo
) f
where 排名1=2