聚合函數(shù)RANK 和 dense_rank 主要的功能是計算一組數(shù)值中的排序值。
在9i版本之前,只有分析功能(analytic ),即從一個查詢結(jié)果中計算每一行的排序值,是基于order_by_clause子句中的value_exprs指定字段的。
其語法為:
RANK ( ) OVER ( [query_partition_clause] order_by_clause )
在9i版本新增加了合計功能(aggregate),即對給定的參數(shù)值在設(shè)定的排序查詢中計算出其排序值。這些參數(shù)必須是常數(shù)或常值表達(dá)式,且必須和ORDER BY子句中的字段個數(shù)、位置、類型完全一致。
其語法為:
RANK ( expr [, expr]... ) WITHIN GROUP
( ORDER BY
expr [ DESC | ASC ] [NULLS { FIRST | LAST }]
[, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]...
)
例子1:
有表Table內(nèi)容如下
COL1 COL2
1 1
2 1
3 2
3 1
4 1
4 2
5 2
5 2
6 2
分析功能:列出Col2分組后根據(jù)Col1排序,并生成數(shù)字列。比較實用于在成績表中查出各科前幾名的信息。
SELECT a.*,RANK() OVER(PARTITION BY col2 ORDER BY col1) "Rank" FROM table a;
結(jié)果如下:
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 (科目,分?jǐn)?shù))
數(shù)學(xué),80
語文,70
數(shù)學(xué),90
數(shù)學(xué),60
數(shù)學(xué),100
語文,88
語文,65
語文,77
現(xiàn)在我想要的結(jié)果是:(即想要每門科目的前3名的分?jǐn)?shù))
在9i版本之前,只有分析功能(analytic ),即從一個查詢結(jié)果中計算每一行的排序值,是基于order_by_clause子句中的value_exprs指定字段的。
其語法為:
RANK ( ) OVER ( [query_partition_clause] order_by_clause )
在9i版本新增加了合計功能(aggregate),即對給定的參數(shù)值在設(shè)定的排序查詢中計算出其排序值。這些參數(shù)必須是常數(shù)或常值表達(dá)式,且必須和ORDER BY子句中的字段個數(shù)、位置、類型完全一致。
其語法為:
RANK ( expr [, expr]... ) WITHIN GROUP
( ORDER BY
expr [ DESC | ASC ] [NULLS { FIRST | LAST }]
[, expr [ DESC | ASC ] [NULLS { FIRST | LAST }]]...
)
例子1:
有表Table內(nèi)容如下
COL1 COL2
1 1
2 1
3 2
3 1
4 1
4 2
5 2
5 2
6 2
分析功能:列出Col2分組后根據(jù)Col1排序,并生成數(shù)字列。比較實用于在成績表中查出各科前幾名的信息。
SELECT a.*,RANK() OVER(PARTITION BY col2 ORDER BY col1) "Rank" FROM table a;
結(jié)果如下:
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 (科目,分?jǐn)?shù))
數(shù)學(xué),80
語文,70
數(shù)學(xué),90
數(shù)學(xué),60
數(shù)學(xué),100
語文,88
語文,65
語文,77
現(xiàn)在我想要的結(jié)果是:(即想要每門科目的前3名的分?jǐn)?shù))