假设我有一个这样的表:
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中有一种优雅的方法吗?
答案 0 :(得分:1)
使用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