何时以及如何在 PostgreSQL 中使用 Window 函数?

When and how to use Window Functions in PostgreSQL?

我一直在学习 PostgreSQL 中的 Window 函数(例如,OVERRANKPARTITION 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 函数有一些了解。