oracle rank()分析函式:
分為:(1)連續或不連續:dense_rank,rank
(2)分割槽或不分割槽:使用partition,不使用partition
舉例:student表資料(sno編號,sname姓名,course科目,score成績)
1. 對比rank和dense_rank
(1)使用rank:
查詢科目為oracle的學生名次
select sno,sname,course,score,rank() over(order by score desc) as 名次 from student where course='oracle';
(2)使用dense_rank:查詢科目為oracle的學生名次
select sno,sname,course,score,dense_rank() over(order by score desc) as 名次 from student where
以上可以說明:rank為不連續,dense_rank為連續
2. 對比使用partition-分割槽和不分割槽:
查詢各學生各科目成績排名【三種語句結果做對比】
(1)select sno,sname,course,score,
rank()
over(order by score desc) as 名次 from student;
(2)select sno,sname,course,score,rank()over(partition by courseorder by score desc) as 名次 from student;
(3)select sno,sname,course,score,dense_rank()over(partition by courseorder by score desc) as 名次 from student;
知識點:
1. 語法:rank() over(order by 排序字段 順序)
dense_rank() over(partition by 分割槽字段 order by 排序字段 順序)
2. partition by 關鍵字是分析性函式的一部分,與聚合函式不同的地方在於分析函式能返回以這個分組中的多條記錄;
而聚合函式一般只有一條記錄反映統計值。
partition by 用於給結果集分組,如果沒有指定就會把整個結果集作為乙個來分組,分割槽函式與排名函式一起使用。
3. 分割槽與分組有什麼區別?
分割槽:將原始資料進行順序排列(記錄數不變)
分組:對原始資料進行
聚合統計(記錄數變少,每組返回乙個結果)
Oracle RANK和dense rank的使用
在9i版本之前,只有分析功能 analytic 即從乙個查詢結果中計算每一行的排序值,是基於order by clause子句中的value exprs指定欄位的。其語法為 rank over query partition clause order by clause 在9i版本新增加了合計功能 ...
母函式講解
例項講解1 有1g,2g,3g,4g四個重量的砝碼各乙個,問它們能稱出哪些重量來?能稱出的每一種重量有幾種方案?我們用x的指數來表示乙個砝碼能貢獻的重量,x的係數表示貢獻這種重量的方案數,不同的貢獻之間用加號連線 1g砝碼能貢獻 x 0 x 1 1 x 2g砝碼能貢獻 x 0 x 2 1 x 2 3...
Python函式講解
在學習函式之前,一直遵循 面向過程程式設計,即 根據業務邏輯從上到下實現功能,其往往用一長段 來實現指定功能,開發過程中最常見的操作就是貼上複製,也就是將之前實現的 塊複製到現需功能處,如下 while true if cpu利用率 90 傳送郵件提醒 連線郵箱伺服器 傳送郵件 關閉連線 if 硬碟...