在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...