我有一个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下。
答案 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技能)提到: