在 SELECT 子查询中使用 AS "new_field" 类型转换即时创建的字段

Type cast a field created on-the-fly using AS "new_field" in a SELECT subquery

上下文

我在使用 SELECT 子查询创建 PostgreSQL table 时遇到了一个真正的 tiny 问题使用类型为 INTEGERNULL 值初始化一个字段(如果我没有指定类型,它们默认为 TEXT)。

废话不多说,下面是一段带有背景说明的代码:

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;

这是按预期工作的,我现在需要在 fid 字段中的任何地方创建 0

但我对 0 值不太满意,因为它们在进一步的计算中具有重要意义,因此我想用 NULL 初始化此 fid 字段值(别担心,它不是 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这个特定查询的时间?

None 这些作品(我每次都面临语法错误):

环境

PostgreSQL 10.12

您实际上必须在 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