代码之家  ›  专栏  ›  技术社区  ›  Yu Chen little_birdie

postgresql insert from sql select语句由于表达式类型文本而失败

  •  0
  • Yu Chen little_birdie  · 技术社区  · 6 年前

    在postgresql将数据插入新表时,我遇到了一个简单的错误。我想使用一个简单的查询,因为这个表只存储不同维度的平均值。我想要我的 avg 列为双精度。我的插入语句是

    insert into benchmark_table 
    (select avg(s.percentage_value) as avg, s.metric_name, s.category 
    from some_table s group by s.category, s.metric_name);
    

    此命令失败,错误如下:

    错误:“avg”列是double precision类型,但表达式是 键入文本行2:…(s.percentage_value)作为双精度)作为平均值, 公制单位… ^提示:您需要重写或转换表达式。

    所以我试着将avg列的精度提高一倍:

    INSERT into benchmark_table 
    (SELECT cast(avg(s.percentage_value) as double precision) as avg, s.metric_name, s.category 
    FROM some_table s group by s.category, s.metric_name);
    

    我也试过

    insert into benchmark_table 
    (Select  avg(s.percentage_value)::double precision as avg, s.metric_name, s.category 
    from summary_view_output s group by s.category, s.metric_name);
    

    但是,我也有同样的错误 平均值 正在发短信。我知道从我的查询返回的是默认文本的结果集,但我看不到任何方法将其转换为另一个数据类型以供外部insert语句使用。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ed Mendez    6 年前

    尝试将::double precision更改为::float,看看是否有效。另外,我注意到insert子句中没有包含字段名。基准表字段的序号位置可能与select语句中的不同。 试着使用。

    insert into benchmark_table( avg, metric_name, category)