ランキング関数のDENSE_RANK()関数とその働きをよく知っています。しかし、私は常にこの関数の名前を書くだけで、暗黙のうちにその仕事をするので、明示的にどのように機能するかを見ることができず、T_SQL 言語でこの関数内の操作を行う構造を見るのが好きです。それを手伝ってくれませんか。
質問する
86 次
1 に答える
1
これは、実行計画から確認できます。
サンプルコード
CREATE TABLE #T
(ID INT IDENTITY(1,1) PRIMARY KEY,
G INT NOT NULL,
S INT NOT NULL)
INSERT INTO #T (G, S) VALUES (1,1),(1,1),(1,3),(1,4),(2,1)
SELECT G,S, DENSE_RANK() OVER (PARTITION BY G ORDER BY S) AS D
FROM #T
実行計画
説明
事前に並べ替えられた使用する適切なインデックスがないため、最初にデータをG、Sの順序で並べ替える必要があります。
次に、2つのセグメントイテレータがあります。セグメントイテレータには「GROUPBY」プロパティがあります。現在の行が前の行と同じグループにあるかどうかを示すセグメント列を出力します。
最初のセグメントイテレータは、パーティショニング列Gでグループ化し、セグメント列Segment1004を出力します。
2番目のセグメントイテレータはG、Sでグループ化し、Segment1005をセグメント列として出力します。
シーケンスプロジェクトイテレータはdense_rank
、これらの入力に基づいて値を出力します。Segment1004がこれが新しいパーティショニンググループであることを示している場合は1を出力し、そうでない場合は、Segment1005の値をチェックして、前回と同じ値を出力するか、最初にインクリメントするかを判断します。
于 2010-09-08T11:38:56.823 に答える