2012-01-23 22 views
0

我有一個PostGIS數據庫,我必須計算新列中行的新值。這些值應該是幾列值的平均值。所以我做的查詢:錯誤:運算符不是唯一的:未知+未知

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

在此查詢BDP的是我的數據庫,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 

我谷歌它和它有事情做與轉換。 我運行PostgreSQL 8.3和數據庫的PostGIS 1.5下,在Windows 7

+0

您正在嘗試添加變種。使用雙引號引用列名,或將其留空。 –

+0

如果我這樣做,我得到的錯誤: – user1165791

+0

對不起,如果這樣做我得到的錯誤:'錯誤:列「da_1」不存在 線2:值(avg(da_1 + da_2 + da_3 + da_4 + da_5 + da_6 + da_7)); ^ ********** **********錯誤 錯誤:列 「da_1」 不存在 SQL狀態:42703 字符:39 「 – user1165791

回答

1

可以產生「內聯表」使用的值,然後你的平均適用於:

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 for添加新行。
+0

恩,謝謝你們兩位!你救了我的夜晚! – user1165791