【发布时间】:2011-08-01 17:03:05
【问题描述】:
UPD:谢谢大家,话题结束了,睡觉后我什么都明白了=)
我在理解 OVER 子句和 ROW_NUMBER 函数时遇到问题。简单表 - 名称和标记。我想计算每个名字的平均分。
SELECT top 1 with ties name, ROW_NUMBER() over (PARTITION BY name ORDER BY name) as number
FROM table
ORDER BY AVG(mark) OVER(PARTITION BY name)
它会显示类似这样的内容,我明白为什么 - 这就是 ROW_NUMBER() 所做的
name|number
Pete 1
Pete 2
但是如果我写
SELECT top 1 with ties name, ROW_NUMBER() over (PARTITION BY name ORDER BY name) as number
FROM table
ORDER BY AVG(mark) OVER(PARTITION BY name), number
它会显示
name|number
Pete 1
这一次我不明白 ORDER BY 如何与 ROW_NUMBER() 函数一起使用。谁能给我解释一下?
【问题讨论】:
-
如果您将 AVG(mark) 添加到 SELECT 子句(以及此结果),也许会有所帮助。那时可能很明显。 (我敢打赌,Pete 和 John 的平均值是一样的。)
-
源数据类似于 (Pete, 10), (Pete, 15), (Pete, 10), (John, 15), (John, 20)。没关系
-
不确定您要在这里做什么:窗口函数没有意义
-
是的,没有它们也可以完成,线索是了解它们是如何工作的。