2012-01-23 14 views
0

J'ai une base de données PostGIS et je dois calculer de nouvelles valeurs pour les lignes dans une nouvelle colonne. Ces valeurs doivent être la moyenne des valeurs de plusieurs colonnes. Alors je fais la requête:ERREUR: l'opérateur n'est pas unique: inconnu + inconnu

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

Dans cette requête est BDP ma base de données, da_m est la nouvelle colonne et da_1 à da_7 sont des colonnes existantes qui ont de type double précision.

da_m a été créée en utilisant

ALTER TABLE bdps ADD COLUMN da_m double precision;

Je reçois l'erreur suivante:

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 

Je google et il a quelque chose à voir avec des moulages. Je cours PostGreSQL 8.3 et la base de données est sous PostGIS 1.5, sous Windows 7.

+0

Vous essayez d'ajouter des varchars. Utilisez des guillemets doubles pour faire référence aux noms de colonnes ou laissez-les vides. –

+0

Si je fais cela, je reçois l'erreur: – user1165791

+0

Désolé, si un je reçois l'erreur: 'ERREUR: la colonne "da_1" n'existe pas LIGNE 2: VALEURS (moy (da_1 + da_2 + da_3 + da_4 + da_5 + da_6 + da_7)); ^ ********** Erreur ********** ERREUR: la colonne "da_1" n'existe pas état SQL: 42703 Caractère: 39 ' – user1165791

Répondre

1

Vous pouvez produire un « tableau inline » en utilisant des valeurs et puis appliquez votre moyenne que:

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) 
) 

qui vous sauve de déconner avec COALESCE, SIGN, en dehors des colonnes à la main, etc.

et comme a_horse_with_no_name (mais avec des compétences SQL et PostgreSQL) mentionné:

  • N'utilisez pas de guillemets simples avec des noms de colonne, des noms de table ou d'autres identifiants. Utilisez des guillemets si vous avez besoin de vous soucier des problèmes majuscules/minuscules ou des caractères étranges (ou mieux, renommez vos colonnes et sauvez un peu de chagrin).
  • Utilisez UPDATE pour mettre à jour les lignes existantes, INSERT pour ajouter de nouvelles lignes.
+0

Eh bien, merci à vous deux! Tu as sauvé ma nuit! – user1165791