我是SQL的新手,非常感谢您的建议.

我正在try 将一个条件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"’时,查询运行正常

推荐答案

ST_GeneratePoints()是一个标量函数,所以你可以把它直接插入到set-returningST_DumpPoints()中,就在select列表中.Demo at 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;
column1 column2 st_astext
2 01 POINT(5.86390304259572 1.927184679457311)
2 01 POINT(3.212729817760193 7.706451275408435)
3 01 POINT(16.515447825106357 22.141316310508124)
3 01 POINT(25.303230663190877 25.957851538628983)
3 01 POINT(13.569699797511326 18.562723639342707)

如果你想坚持你的当前布局,你需要把WHERE列表移动到afterFROM列表—你可能得到的语法错误是因为你把条件放在了它的正中间.

对于导致隐式连接的, commas也要非常小心.考虑显式使用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';

注意引用:

  • '01'是常数text
  • "01"是对同名列或变量的引用

我敢打赌,你想要前者,而不是后者,并且修复了from..where..,逗号的问题,你可能会得到一个错误,说没有找到列"01".Chapter 4. SQL Syntax, section 4.1. Lexical Structure涵盖了这个主题.

从技术上讲,将列命名为"01",然后搜索column2中的值等于列"01"中的值的行(如the demo所示)并不无效,但我不认为这是您想要的,而且这不是一个非常清晰/实用的命名系统.你甚至可以命名一列"(双引号字符)或 (单个空格),但虽然这在技术上并没有错误,但我想说在道德上这是相当邪恶的.

Sql相关问答推荐

如何将varchar传递给tvf并使用该参数来查询结果SQL服务器

按postquist中的日期查询json列

在SQL中创建一个计数器,根据BigQuery/SQL中的条件递归地添加行值

为表中每个缺少的引用创建新行

为什么在postgres中,横向连接比相关子查询快?

计算周时出现SQL错误结果

在Oracle SQL中将列值转换为行

PostgreSQL 9.6嵌套的INSERT/RETURN语句的CTE性能低得令人无法接受

如何隐藏聚合JSON数组元素的键

最小非重复集的SQL查询

SQL JSON_QUERY 使用列中的值构造 json 路径并接收错误

将具有嵌套 XML 的列转换为 SQL 中的表格格式?

如何向 mariadb 添加外键?

DB2 SQL查询结果多余数据

在presto sql中解析带有区域的时间格式

SQL ORACLE - 查找连续天数

带聚合函数的 percentile_cont

如何计算每行出现的次数并显示在另一个表中?

使用标准SQL 触发更新当前日期

如何在 Trino/Presto 中过滤掉 map 中的某些键?