如何在Postgres中的表中索引子组?

时间:2019-08-20 12:33:39

标签: postgresql

假设我有一个这样的表:

select country_id, city_id, person_id from mytable


country_id,city_id,person_id
123,45,100334
123,45,3460456
123,45,943875
123,121,4362
123,121,124747
146,87,3457320
146,89,3495879
146,89,34703924

我想索引country_id和city_id的子组以获得这样的结果:

select country_id, city_id, person_id, ???, ??? from mytable

country_id,city_id,person_id,country_num,city_num
123,45,100334,1,1
123,45,3460456,1,1
123,45,943875,1,1
123,121,4362,1,2
123,121,124747,1,2
146,87,3457320,2,1
146,89,3495879,2,2
146,89,34703924,2,2

换句话说,我想用从1开始的整数对序列中的所有国家/地区进行编号,而且我想分别在每个国家/地区中以相同的方式标记城市。在Postgres中有一种优雅的方法吗?

1 个答案:

答案 0 :(得分:1)

demo:db<>fiddle

使用dense_rank() window function

SELECT
    *,
    dense_rank() OVER (ORDER BY country_id),
    dense_rank() OVER (PARTITION BY country_id ORDER BY city_id)
FROM
    mytable

Further reading