1. ホーム
  2. sql-server

SQL ServerでRANK()を使用する方法

2023-09-05 18:20:33

質問

私は RANK() を SQL Server で使用することができません。

以下は私のコードです。

SELECT contendernum,
       totals, 
       RANK() OVER (PARTITION BY ContenderNum ORDER BY totals ASC) AS xRank
FROM (
   SELECT ContenderNum,
          SUM(Criteria1+Criteria2+Criteria3+Criteria4) AS totals
   FROM Cat1GroupImpersonation
   GROUP BY ContenderNum
) AS a

そのクエリの結果は

contendernum    totals    xRank
          1       196        1
          2       181        1
          3       192        1
          4       181        1
          5       179        1

私の望む結果は何か。

contendernum    totals    xRank
          1       196        1
          2       181        3
          3       192        2
          4       181        3
          5       179        4

を基準にした順位付けをしたい。 totals . のように同じ値がある場合 181 のように同じ値があれば、2つの数値は同じ xRank .

どのように解決するのですか?

変更してください。

RANK() OVER (PARTITION BY ContenderNum ORDER BY totals ASC) AS xRank

になります。

RANK() OVER (ORDER BY totals DESC) AS xRank


この例を見てください。

SQL Fiddleデモ

の違いも見ておきましょう。 RANK (Transact-SQL) DENSE_RANK (トランザクト SQL) :

<ブロッククオート

ランク (トランザクトSQL)

2つ以上の行が同順位であった場合、同順位の行はそれぞれ同じ を受け取ります。たとえば、2 人のトップセールスマンが同じ SalesYTD 値を持つ場合、2 人とも 1 位になります。 の値が同じであれば、両者とも1位となります。次に高い SalesYTD 値を持つ営業担当者は 3 位にランクされます。 の行は、3 位にランクされます。 より上位にランクされます。したがって、RANK関数は必ずしも連続した整数を返すとは限りません。 連続した整数を返すとは限りません。

DENSE_RANK (トランザクト-SQL)

結果セットのパーティション内の行の順位を、順位にずれがないように返します。 行の順位を返します。行のランクは、1+当該行の前にある別個のランクの数です。 の数を加えたものです。