postgres将相同的数字分配给多行

时间:2014-09-26 22:34:43

标签: sql postgresql window-functions

我有一个数据库表,其中包含如下地址信息。

  

地址1 |地址2 |城市|州|位置号
  街道名称123大厦1234 |休斯顿| TX | 12345个
  街道名称123大厦1234 |休斯顿| TX | 67890个
  456街道名称| bldg 7890 |新奥尔良|洛杉矶| 56789个
  789街道名称| bldg 0121 |长滩| CA | 98765个
  789街道名称| bldg 0121 |长滩| CA | 53218个
  789街道名称| bldg 0121 |长滩| CA | 13579个

因此,即使位置具有相同的地址,它们也具有不同的ID。 我要做的是添加一个名为' group_number'的新列。它将对具有相同地址的所有位置ID进行分组。

这是我的预期结果。

  

组号|地址1 |地址2 |城市|州|位置号
  1 |街道名称123大厦1234 |休斯顿| TX | 12345个
  1 |街道名称123大厦1234 |休斯顿| TX | 67890个
  2 | 456街道名称| bldg 7890 |新奥尔良|洛杉矶| 56789个
  3 | 789街道名称| bldg 0121 |长滩| CA | 98765个
  3 | 789街道名称| bldg 0121 |长滩| CA | 53218个
  3 | 789街道名称| bldg 0121 |长滩| CA | 13579个

我尝试使用像rank(),row_num()和dense_rank()这样的windows函数 并按地址分区|| city || state

我认为这些功能可能允许您在每个分区中具有相同的排名。 但是所有这些函数都按分区分配排名/顺序行号。

你能帮我找出创建群号的最佳功能吗?

由于

1 个答案:

答案 0 :(得分:4)

我认为您希望dense_rank()像这样使用:

select dense_rank() over (order by address1, address2, city, state) as GroupNumber,
       address1, address2, city, state, locationid
from addresses a;

根本不需要partition by来做你想做的事。