gpt4 book ai didi

postgresql postgis : defining a new subzone index consistent with the old one

转载 作者:行者123 更新时间:2023-11-29 13:22:02 24 4
gpt4 key购买 nike

这是我的问题:我有一个带有索引的多边形图层,如下所示:
身份证,人口
100, 26
200, 12
300, 45
...

我编辑了多边形图层并将一些多边形分成更小的多边形(大约 3-7 个子多边形)。我已经负责在子区域之间拆分我的数据(根据人口密度)。所以现在我有这个:
身份证,人口
100, 22
100, 1
100, 3
200, 6
200, 6

我想创建一个反射(reflect)旧索引的新索引。例如:
oldId、newId、人口
100, 100, 22
100, 101, 1
100, 102, 3
200, 200, 6
200, 201, 6

我尝试过的事情:定义一个序列:

如果存在则删除序列 increment_id;
CREATE TEMP SEQUENCE increment_id INCREMENT BY 1 MINVALUE 0;
选择
ID,
id+nextval('increment_id') AS new_id
FROM polygon_mapping WHERE id = 100;

对于要重命名的单个 ID(WHERE 子句),这很有效,但我不知道如何为每个 ID 重新启动序列。

我考虑过使用“滞后”函数来比较当前 ID 和之前的 ID。但我无法让它发挥作用。

有什么建议吗?谢谢

ps:我经历过 Reset auto increment counter in postgres他们在那里重置了 SEQUENCE,但我没能让它在 SELECT 子句中工作。

最佳答案

也许使用 generate_series()

SELECT id, generate_series(id,id + count(*)) AS newid 
FROM polygon_mapping GROUP BY id;

如果要选择其他属性,请使用子查询并使用 array_agg 对属性进行分组, 而不是在主查询中从数组中选择值:

SELECT id, 
generate - 1 + id AS newid,
population_array[generate]
FROM (
SELECT id,
generate_series(1,count(*)) AS generate,
array_agg(population) AS population_array
FROM polygon_mapping GROUP BY id
) AS foo ORDER BY newid,id;

关于postgresql postgis : defining a new subzone index consistent with the old one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40053286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com