Microsoft SQL Server
ランキング関数
サーチ…
構文
- DENSE_RANK()OVER([<partition_by_clause>] <order_by_clause>)
- RANK()OVER([partition_by_clause] order_by_clause)
パラメーター
引数 | 詳細 |
---|---|
<partition_by_clause> | FROM句で生成された結果セットを、 DENSE_RANK 関数が適用されているパーティションに分割します。 PARTITION BY 構文については、 OVER句(Transact-SQL)を参照してください。 |
<order_by_clause> | パーティション内の行にDENSE_RANK 関数が適用される順序を決定します。 |
OVER ( [ partition_by_clause ] order_by_clause) | partition_by_clause は、 FROM 句によって生成された結果セットを、関数が適用されるパーティションに分割します。指定されていない場合、関数は照会結果セットのすべての行を単一のグループとして扱います。 order_by_clauseは、関数が適用される前のデータの順序を決定します。 order_by_clauseは必須です。 OVER 句の<rows or range clause> はRANK 関数に指定できません。詳細については、 OVER句(Transact-SQL)を参照してください。 |
備考
2つ以上の行が同じパーティション内のランクを結んでいる場合、それぞれの連結された行は同じランクを受け取ります。たとえば、2人のトップセールスマンが同じSalesYTD値を持つ場合、それらは両方とも1ランクです。次にSalesYTDが高いセールス担当者は2位にランクされます。これは、この行の前に来る別個の行の数より1つ多いです。したがって、 DENSE_RANK
関数によって返される数値にはギャップがなく、常に連続するランクがあります。
問合せ全体に使用されるソート順によって、結果に行が表示される順序が決まります。これは、ランク1の行がパーティション内の最初の行である必要はないことを意味します。
DENSE_RANK
は非決定的です。詳細については、 確定的な関数と非決定的な関数を参照してください。
RANK()
A RANK()分割された列の結果セット内の各行のランクを返します。
例:
Select Studentid,Name,Subject,Marks,
RANK() over(partition by name order by Marks desc)Rank
From Exam
order by name,subject
Studentid Name Subject Marks Rank
101 Ivan Maths 70 2
101 Ivan Science 80 1
101 Ivan Social 60 3
102 Ryan Maths 60 2
102 Ryan Science 50 3
102 Ryan Social 70 1
103 Tanvi Maths 90 1
103 Tanvi Science 90 1
103 Tanvi Social 80 3
DENSE_RANK()
RANK()と同じです。ギャップなしのランクを返します。
Select Studentid, Name,Subject,Marks,
DENSE_RANK() over(partition by name order by Marks desc)Rank
From Exam
order by name
Studentid Name Subject Marks Rank
101 Ivan Science 80 1
101 Ivan Maths 70 2
101 Ivan Social 60 3
102 Ryan Social 70 1
102 Ryan Maths 60 2
102 Ryan Science 50 3
103 Tanvi Maths 90 1
103 Tanvi Science 90 1
103 Tanvi Social 80 2
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow