首先,來構(gòu)造一些數(shù)據(jù)
應(yīng)縣網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
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;
下面來看一下一些方式的排名結(jié)果:
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里面相關(guān)的排序函數(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
納悶這些什么什么用法的問題為什么不先搜索一下而直接在這里問呢?網(wǎng)上這些用法介紹很詳細的。之前回答的一個復(fù)制過來你看下:
兩種用法:
select rank(7500) within group(order by empno) from emp a;
select rank() over(order by empno),a.* from emp a;
第一種計算7500在empno中排在第幾位。
第二種計算各行empno在總結(jié)果集中排在第幾位。
同樣的用法還有dense_rank,對應(yīng)如果empno出現(xiàn)重復(fù)的時候排行情況。
以上。
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