【发布时间】:2018-07-03 17:21:19
【问题描述】:
我在 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”是双精度类型,但表达式是 type text LINE 2: ...(s.percentage_value) as double precision) as avg, s.metric_n... ^ 提示:您需要重写或转换表达式。
所以我尝试将我的 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);
但是,我收到关于 avg 是文本的相同错误。我知道从我的查询返回的是默认文本的结果集,但我没有看到任何方法可以将其转换为另一种数据类型以供我的外部 INSERT 语句使用。
【问题讨论】:
-
尝试将 ::double 精度更改为 ::float?另外,表格字段的序号位置可能与您的选择不同。尝试使用“插入 benchmark_table(avg, metric_name, category)”
-
是的,这行得通。随意写这个作为答案,我会接受
标签: postgresql