我有一个数据库表,其中包含如下地址信息。
地址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
我认为这些功能可能允许您在每个分区中具有相同的排名。 但是所有这些函数都按分区分配排名/顺序行号。
你能帮我找出创建群号的最佳功能吗?
由于
答案 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
来做你想做的事。