聲明:本篇文章是緊接着上一篇文章《》而寫的,爲了加深本身對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
三、分區字段:根據什麼字段進行分區
問題:
一、分區與分組有什麼區別?
答案:分區只是將原始數據進行名次排列(記錄數不變);分組分組是對原始數據進行聚合統計(記錄數變少,每組返回一條),注意:聚合。