在PostgreSQL中使用Windows函数row_number()OVER()

时间:2016-03-04 17:34:45

标签: php sql database postgresql

我正在查看row_number()的文档,但我不明白这是什么用途。我有2个查询,我试图将结果加入到一个表中。使用windows函数row_number()会在这种情况下有用。我需要了解使用此功能的用法。文档说明"其分区中当前行的编号,从1&#34开始计算;但没有给出一个例子。

1 个答案:

答案 0 :(得分:1)

ROW_NUMBER() OVER ..无法帮助您JOIN。要连接到表,可以在JOIN子句和FROM参数中使用ON来指定要连接的两个表之间共享的字段。

对于ROW_NUMBER(),假设您有一个像

这样的表格
+-------+----------+
| color |  animal  |
+-------+----------+
| red   | panda    |
| red   | squirrel |
| black | elephant |
| black | squirrel |
| black | panther  |
| white | rabbit   |
| white | cat      |
| white | dog      |
+-------+----------+

如果你写了:

SELECT
     color, animal, ROW_NUMBER() OVER (PARTITION BY color ORDER BY animal) as rownumber
FROM myTable;

你会得到:

+-------+----------+-----------+
| color |  animal  | rownumber |
+-------+----------+-----------+
| red   | panda    |         1 |
| red   | squirrel |         2 |
| black | elephant |         1 |
| black | squirrel |         3 |
| black | panther  |         2 |
| white | rabbit   |         3 |
| white | cat      |         1 |
| white | dog      |         2 |
+-------+----------+-----------+

它的作用是"分区"按颜色记录。基本上用颜色制作动物群。然后按动物名称对每个组进行排序。然后它在它们的颜色分区中从1开始编号。

我无法想象这会对join有所帮助,但也许你有一个奇怪的情况,即两个表没有字段到字段的关系,所以你必须对记录进行排名并加入排名?我希望不要因为那将是困难的,粗略的和昂贵的。