0

语境

在使用子查询创建PostgreSQL表时,我遇到了一个非常小的问题,我想用类型的值初始化一个字段(如果我不指定类型,它们默认为)。SELECTNULLINTEGERTEXT

说得够多了,下面是一段带有背景解释的代码:

CREATE TABLE my_table AS
  SELECT
    0 AS fid, -- initiate new field here, it doesn't exist in the table where the select is run on
    gid,
    min(distance) AS mindist
  FROM
    schema.points
  GROUP BY
    gid;

这按预期工作,我现在需要创建0的领域无处不在。fid

但我对0值不太满意,因为它们在进一步的计算中具有重要意义,因此我想fid用值初始化这个字段NULL(别担心,它不是 a pkey)。

因此,我将其更改为:

CREATE TABLE my_table AS
  SELECT
    NULL AS fid, -- initiate new field here, it doesn't exist in the table where the select is run on
    gid,
    min(distance) AS mindist
  FROM
    schema.points
  GROUP BY
    gid;

它运行良好!
除了现在该字段是一个TEXT字段(使用时看起来它是“默认”类型NULL),我真的需要它作为一个INTEGER(如果我让它作为,我会遇到更多麻烦TEXT)。

问题

我如何在这个特定查询中同时设置(即从技术上讲)fid字段NULL 类型?INTEGER

这些都不起作用(我每次都面临语法错误):

  • NULL AS fid::INTEGER
  • INTEGER NULL AS fid
  • NULL INTEGER AS fid

环境

PostgreSQL 10.12

4

1 回答 1

1

您实际上必须在 null 之后设置类型转换,使用:

CREATE TABLE my_table AS
  SELECT
    NULL::INTEGER AS fid, -- initiate new field here as a NULL INTEGER
    gid,
    min(distance) AS mindist
  FROM
    schema.points
  GROUP BY
    gid;

然后你将拥有它:

pgAdmin 结果

结果pgAdmin

于 2020-05-01T19:42:32.600 回答