ОШИБКА: оператор не уникален: неизвестно + неизвестно - PullRequest
0 голосов
/ 24 января 2012

У меня есть база данных 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

Я гуглю это, и это как-то связано с приведениями. Я запускаю PostGreSQL 8.3, а база данных находится под PostGIS 1.5 в Windows 7.

1 Ответ

1 голос
/ 24 января 2012

Вы можете создать «встроенную таблицу», используя 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 для добавления новых строк.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...