新聞中心
Oracle分析函數(shù)之排序 row_number() & rank()
對(duì)于排序分析,應(yīng)用的業(yè)務(wù)分析場(chǎng)景很多,例如所有銷售大區(qū)的TOP5、按具體規(guī)則對(duì)數(shù)據(jù)集進(jìn)行重新排序編號(hào)等,這些業(yè)務(wù)場(chǎng)景采用分析函數(shù)中排序函數(shù),將很方便簡(jiǎn)單。
創(chuàng)新互聯(lián)專注于清河門企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。清河門網(wǎng)站建設(shè)公司,為清河門等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站建設(shè),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
當(dāng)前常用的排序類分析函數(shù)包括:row_number()、rank()、dense_rank(),這三個(gè)函數(shù)都可應(yīng)用在排序場(chǎng)景中,但 又有些許不同。
特點(diǎn):對(duì)分組后的排序結(jié)果進(jìn)行遞增編號(hào),出現(xiàn)同值的也是遞增處理。
rank()特點(diǎn):按分組后的排序結(jié)果進(jìn)行遞增編號(hào),如出現(xiàn)相同值則序號(hào)一致,但相鄰出現(xiàn)的不同值序號(hào)將從rown+N開(kāi)始(rown為前一個(gè)值的序號(hào),N為前一個(gè)值相同的個(gè)數(shù))。
dense_rank()特點(diǎn):和rank()相似,按分組后的排序結(jié)果進(jìn)行遞增編號(hào),如出現(xiàn)相同值則序號(hào)一致,但相鄰出現(xiàn)的不同值序號(hào)將從rown+1開(kāi)始。
1.row_number()應(yīng)用于 不區(qū)分同值排序 的業(yè)務(wù)場(chǎng)景;
2.rank()dense_rank()應(yīng)用于 區(qū)分同值排序 的業(yè)務(wù)場(chǎng)景,至于用rank和dense_rank,則要看對(duì)同值排序后對(duì)序號(hào)遞增方式的具體要求來(lái)定。
有了上述三個(gè)函數(shù),對(duì)于日常公司分析大區(qū)銷售排名、銷售代表排名、部門費(fèi)用項(xiàng)排名等等,將會(huì)非常的方便快捷。
oracle數(shù)據(jù)庫(kù)中怎樣依據(jù)成績(jī)實(shí)現(xiàn)排名
首先,來(lái)構(gòu)造一些數(shù)據(jù)
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;
下面來(lái)看一下一些方式的排名結(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;
oracle如何按照具有相同字段屬性排序?
按照語(yǔ)義正確的方法,你應(yīng)該先group by和order by分?jǐn)?shù),然后再搞點(diǎn)花招,就可以讓分?jǐn)?shù)相同的人使用一樣的排名了。你不應(yīng)該有任何業(yè)務(wù)邏輯使得相同分?jǐn)?shù)的人順序上有差別會(huì)造成影響。
你應(yīng)該說(shuō)的是row_number()over 、rank()over和dense_rank()over這三種分析函數(shù)吧。后面兩個(gè)就是可以存在并列的情況。 寫法是 row_number()over(partition by...order by score),其他兩個(gè)也一樣
oracle自定義分類排名怎么排?
SELECT RANK()OVER(ORDER BY sal),emp.* FROM emp WHERE sal BETWEEN 1000 AND 1500 UNION
SELECT RANK()OVER(ORDER BY sal),emp.* FROM emp WHERE sal BETWEEN 1501 AND 2000 UNION
SELECT RANK()OVER(ORDER BY sal),emp.* FROM emp WHERE sal2000 ORDER BY 7;
oracle?rank函數(shù)怎么用
簡(jiǎn)單用法:
rank()
over(partition
by
分組字段
order
by
排序字段)
partition
by
分組字段為可選。
oracle里面相關(guān)的排序函數(shù):
row_number
排名不并列
rank
排名并列
dense_rank排名并列
集中函數(shù)區(qū)別:
一共四名選手參賽,兩名選手的成績(jī)一致,皆為第二名。那么按照不同的算法排名如下:
row_number
1,2,3,4
(2,3的成績(jī)一致)
rank
1,2,2,4(沒(méi)有第三名)
dense_rank
1,2,2,3
oracle怎么查排名頭兩位信息
oracle查詢排名可以使用排名函數(shù)。
比如:RANK DENSE_RANK
參考語(yǔ)句:
--按照筆試成績(jī)進(jìn)行排名,取出前兩名
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
分享名稱:oracle怎么做排名 oracle如何排序
當(dāng)前地址:http://fisionsoft.com.cn/article/hjdgps.html