Oracle RANK和dense rank的使用

2021-08-31 23:13:57 字數 2359 閱讀 4192

在9i版本之前,只有分析功能(analytic ),即從乙個查詢結果中計算每一行的排序值,是基於order_by_clause子句中的value_exprs指定欄位的。

其語法為:

rank ( ) over ( [query_partition_clause] order_by_clause )

在9i版本新增加了合計功能(aggregate),即對給定的引數值在設定的排序查詢中計算出其排序值。這些引數必須是常數或常值表示式,且必須和order by子句中的字段個數、位置、型別完全一致。

其語法為:

rank ( expr [, expr]... ) within group

( order by

expr [ desc | asc ] [nulls ]

[, expr [ desc | asc ] [nulls ]]...

)例子1:

有表table內容如下

col1 col2

1 12 1

3 23 1

4 14 2

5 25 2

6 2分析功能:列出col2分組後根據col1排序,並生成數字列。比較實用於在成績表中查出各科前幾名的資訊。

select a.*,rank() over(partition by col2 order by col1) "rank" from table a;

結果如下:

col1 col2 rank

1 1   1

2 1   2

3 1   3

4 1   4

3 2   1

4 2   2

5 2   3

5 2   3

6 2   5

例子2:

table:a (科目,分數)

數學,80

語文,70

數學,90

數學,60

數學,100

語文,88

語文,65

語文,77

現在我想要的結果是:(即想要每門科目的前3名的分數

數學,100

數學,90

數學,80

語文,88

語文,77

語文,70

那麼語句就這麼寫:

select * from (select rank() over(partition by 科目 order by 分數 desc) rk,a.* from a) t

where t.rk<=3;

例子3:

合計功能:計算出數值(4,1)在orade by col1,col2排序下的排序值,也就是col1=4,col2=1在排序以後的位置

select rank(4,3) within group (order by col1,col2) "rank" from table;

結果如下:

rank

4例如:表

a      b      c

a     liu     wang

a     jin     shu

a     cai     kai

b     yang     du

b     lin     ying

b     yao     cai

b     yang     99

例如:當rank時為:

select m.a,m.b,m.c,rank() over(partition by a order by b) liu from test3 m

a     b       c     liu

a     cai      kai     1

a     jin      shu     2

a     liu      wang     3

b     lin      ying     1

b     yang     du      2

b     yang     99      2

b     yao      cai     4

而如果用dense_rank時為:

select m.a,m.b,m.c,dense_rank() over(partition by a order by b) liu from test3 m

a     b       c     liu

a     cai     kai     1

a     jin     shu     2

a     liu     wang     3

b     lin     ying     1

b     yang     du      2

b     yang     99      2

b     yao     cai     3

oracle rank 函式講解

oracle rank 分析函式 分為 1 連續或不連續 dense rank,rank 2 分割槽或不分割槽 使用partition,不使用partition 舉例 student表資料 sno編號,sname姓名,course科目,score成績 1.對比rank和dense rank 1 使用...

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...

rpx和樣式和class和flex

5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...