SQL (postgreSQL) 根据条件创建点表

问题描述 投票:0回答:1

我是 SQL 新手,感谢任何建议。

我正在尝试将条件 where 语句放入查询中,以将点生成过滤到第 2 列具有 01 的位置。

CREATE TABLE schema.table2 AS
    
SELECT "column1", "column2", dp.geom 
    
FROM table1 WHERE column2 = "01", st_dumppoints(st_generatepoints(schema.geom, CAST(schema.column1 AS INT))) AS dp;

当我取出 'WHERE column2 = "01"' 时,查询工作正常

sql postgresql
1个回答
0
投票

ST_GeneratePoints()
是一个标量函数,因此您可以将其直接插入集合返回
ST_DumpPoints()
,就在
select
列表中。 db<>fiddle 的演示:

CREATE TABLE schema.table2 AS
SELECT column1, 
       column2,
       (st_dumppoints(st_generatepoints(geom, column1::int)) ).geom
FROM table1
WHERE column2 = '01';

select column1, column2, st_astext(geom) from schema.table2;
第1栏 第2栏 st_astext
2 01 点(5.86390304259572 1.927184679457311)
2 01 点(3.212729817760193 7.706451275408435)
3 01 点(16.515447825106357 22.141316310508124)
3 01 点(25.303230663190877 25.957851538628983)
3 01 点(13.569699797511326 18.562723639342707)

如果您想坚持当前布局,则需要将

WHERE
列表移动到 FROM 列表的
后面。还建议非常小心使用 
,
 逗号。考虑明确使用 
CROSS JOIN LATERAL
 来代替,因为这就是您使用 
,
 逗号将被翻译为:

CREATE TABLE schema.table3 AS SELECT column1, column2, dp.geom FROM table1 CROSS JOIN LATERAL st_dumppoints(st_generatepoints(geom,column1::int)) AS dp WHERE column2 = '01';
    
© www.soinside.com 2019 - 2024. All rights reserved.