Oracle中Rank()函數的使用(續)

聲明:本篇文章是緊接着上一篇文章《》而寫的,爲了加深本身對RANK()函數和DENSE_RANK()函數的理解,我從網上找了一個例子,本身測試寫代碼,因而有了下面的文章。例子連接:http://www.docin.com/p-1770949.html 有興趣的同窗能夠看看。謝謝~ html

--已知兩種排名方式(分區和不分區):使用和不適用PARTITION sql

--兩種計算方式(連續、不連續),對應函數:DENSE_RANK(),RANK() 函數

1) 建表 T_SCORE 測試

CREATE TABLE "JWXT"."T_SCORE" 
   (	"S_ID" VARCHAR2(255), 
	"S_NAME" VARCHAR2(255), 
	"SUB_NAME" VARCHAR2(255), 
	"SCORE" NUMBER(5,2)
   )



 

2)查詢各學生科目爲Oracle排名(簡單排名) spa


    對比RANK()與DENSE_RANK():非連續排名與連續排名(都是簡單排名): code


3) 查詢各學生各科排名(分區排名) htm


4) 查詢各科前2名(分區排名) 排序

    相似:新聞表:求欄目點擊率在前3位的新聞; 商品表:求各種別銷售額在前10位的商品 ci


使用DENSE_RANK()與RAN()的區別: get

 

5) 查詢各同窗總分

SELECT A.S_ID, A.S_NAME, SUM(A.SCORE) TOTALSCORE
FROM T_SCORE A
GROUP BY A.S_NAME, A.S_ID 
ORDER BY TOTALSCORE DESC;


 

總結:

一、語法:RANK() OVER (ORDER BY 排序字段 順序)

               RANK() OVER (PARTITION BY 分組字段 ORDER BY 排序字段 順序)

二、順序:ASC|DESC

三、分區字段:根據什麼字段進行分區

問題:

一、分區與分組有什麼區別?

答案:分區只是將原始數據進行名次排列(記錄數不變);分組分組是對原始數據進行聚合統計(記錄數變少,每組返回一條),注意:聚合。

相關文章
相關標籤/搜索