2012-01-23 66 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 

私はそれをGoogleとそれはキャストとは何かを持っています。 私は、PostgreSQL 8.3を実行し、データベースはあなたが値を使用して、「インライン表」を生成し、そのにあなたの平均を適用することができますWindows 7の

+0

varcharsを追加しようとしています。二重引用符を使用して列名を参照するか、またはそれらを裸のままにします。 –

+0

エラー: – user1165791

+0

エラー:「エラー:列「da_1」が存在しません」 行2:値(平均値(da_1 + da_2 + da_3 + da_4 + da_5 + da_6 + da_7)); ^ ********** **********エラー ERROR:42703 文字::39 「 – user1165791

答えて

1

に、PostGISの1.5の下で:

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

関連する問題