【问题标题】:When and how to use Window Functions in PostgreSQL?何时以及如何在 PostgreSQL 中使用窗口函数?
【发布时间】:2021-01-25 03:19:32
【问题描述】:

我一直在学习 PostgreSQL 中的窗口函数(例如,OVERRANKPARTITION BY 子句),但仍然对何时以及如何使用它们以及结果输出意味着什么感到困惑?

有人对它们有一些总结性的解释吗?

示例:OVER()andRANK()

【问题讨论】:

  • 你能举个例子说明你正在查看的关于 postrges 中窗口函数的文档吗?
  • 已上传 OVER 和 RANK 子句的示例@RossBush

标签: sql postgresql window-functions over-clause


【解决方案1】:

我可以给你一个简单的例子,你可以使用rank

假设您有student_marks 表,并且每个类都有一个测试。 (第 1 类,第 2 类,.. 用单个表中每个学生的分数进行测试,为简单起见,所有数据都在一个表中考虑)

如果您现在想为每个班级的学生提供结果(最高分产生第一个数字,依此类推),那么您可以使用rank,如下所示:

Rank() over (partition by class order by marks desc) -- student_rank_in_class

这里,

  • Partition by class - 表示每个班级应该给出排名。

  • Order by marks desc - 表示在每个班级中,得分最高的学生 (marks desc) 应获得第一名,然后第二高的学生应获得第二名。

希望,这个解释能让你对rank窗口函数有所了解。

【讨论】:

  • 嗨大力水手谢谢你的解释。我也想知道我可以使用GROUP BY 而不是PARTITION BY 来回答这个问题(通过稍微改变查询的格式),因为我发现它们很相似?
  • Group by 将对结果进行分组,并将对聚合函数进行操作,该函数会根据您分组的列数小于或等于表中的行数。如果您仅按班级分组,那么您将获得每班一排。在这种情况下,您不会获得每个学生的数据。
  • 可爱!!我现在知道了。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
相关资源
最近更新 更多