错误:运算符不唯一:未知+未知

时间:2012-01-23 21:07:04

标签: postgresql

我有一个PostGIS数据库,我必须为新列中的行计算新值。这些值应该是几列值的平均值。所以我做了查询:

INSERT INTO bdps (da_m) 
VALUES (avg('da_1'+'da_2'+'da_3'+'da_4'+'da_5'+'da_6'+'da_7'));

在此查询中,bdps是我的数据库,da_m是新列,da_1到da_7是具有双精度类型的现有列。

da_m是使用

创建的

ALTER TABLE bdps ADD COLUMN da_m double precision;

我收到以下错误:

    ERROR:  operator is not unique: unknown + unknown
LINE 2:  VALUES (avg('da_1'+'da_2'+'da_3'+'da_4'+'da_5'+'da_6'+'da_7...
                           ^
HINT:  Could not choose a best candidate operator. You might need to add explicit type casts.

********** Error **********

ERROR: operator is not unique: unknown + unknown
SQL state: 42725
Hint: Could not choose a best candidate operator. You might need to add explicit type casts.
Character: 45

我谷歌它,它与演员阵容有关。 我在Windows 7上运行PostGreSQL 8.3,数据库在PostGIS 1.5下。

1 个答案:

答案 0 :(得分:1)

您可以制作"内联表格"使用VALUES,然后将平均值应用于:

update bdps
set da_m = (
    select avg(x)
    from (values (da_1), (da_2), (da_3), (da_4), (da_5), (da_6), (da_7)) as dt(x)
)

可以帮助您避免使用COALESCE,SIGN,手动计算列等等。

a_horse_with_no_name(但有SQL和PostgreSQL技能)提到:

  • 不要使用带有列名,表名或其他标识符的单引号。如果您需要担心大/小写问题或奇怪的字符(或者更好,重命名列并节省一些悲伤),请使用双引号。
  • 使用UPDATE更新现有行,INSERT用于添加新行。