何时以及如何在 PostgreSQL 中使用 Window 函数?
When and how to use Window Functions in PostgreSQL?
我一直在学习 PostgreSQL 中的 Window 函数(例如,OVER
、RANK
、PARTITION BY
子句),但仍然对何时以及如何使用它们感到困惑结果输出意味着什么?
有没有人对它们有一些总结性的解释?
示例:OVER()
andRANK()
我可以给你一个简单的例子,你可以在其中使用 rank
。
假设您有 student_marks
table 并且每个 class 都有一个测试。 (Class 1,class 2,.. 对每个学生的分数进行单独测试 table,为简单起见,所有数据都在一个 table 中考虑)
如果您现在想将每个 class 的结果提供给学生(最高分产生第一个数字,依此类推),那么您可以使用 rank
,如下所示:
Rank() over (partition by class order by marks desc) -- student_rank_in_class
这里,
Partition by class
- 表示排名应按 class.
给出
Order by marks desc
- 表示在每个 class 中,分数最高的学生 (marks desc
) 应给予第一名,然后第二高的学生应给予第二名,并且等等。
希望,这个解释能让你对 rank
window 函数有一些了解。
我一直在学习 PostgreSQL 中的 Window 函数(例如,OVER
、RANK
、PARTITION BY
子句),但仍然对何时以及如何使用它们感到困惑结果输出意味着什么?
有没有人对它们有一些总结性的解释?
示例:OVER()
andRANK()
我可以给你一个简单的例子,你可以在其中使用 rank
。
假设您有 student_marks
table 并且每个 class 都有一个测试。 (Class 1,class 2,.. 对每个学生的分数进行单独测试 table,为简单起见,所有数据都在一个 table 中考虑)
如果您现在想将每个 class 的结果提供给学生(最高分产生第一个数字,依此类推),那么您可以使用 rank
,如下所示:
Rank() over (partition by class order by marks desc) -- student_rank_in_class
这里,
给出Partition by class
- 表示排名应按 class.Order by marks desc
- 表示在每个 class 中,分数最高的学生 (marks desc
) 应给予第一名,然后第二高的学生应给予第二名,并且等等。
希望,这个解释能让你对 rank
window 函数有一些了解。