我很了解排名函数的 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个段迭代器。段迭代器有一个“GROUP BY”属性。它们输出一个段列,指示当前行是否与前一行在同一组中。
第一个段迭代器按分区列 G 分组并输出段列 Segment1004。
第二个段迭代器按 G,S 分组并输出 Segment1005 作为段列。
序列项目迭代器dense_rank
根据这些输入输出值。如果 Segment1004 表示这是一个新的分区组,它将输出 1,否则它将检查 Segment1005 的值,以确定是输出与上次相同的值还是先增加它。
于 2010-09-08T11:38:56.823 回答