Как обновить разные значения для каждой строки? - PullRequest
1 голос
/ 07 июля 2019

У меня есть таблица postgres predicted_data:

 id | lat | lon | predicted
----+-----+-----+-----------
  1 |   1 |   1 |         10
  2 |   2 |   2 |         20
  3 |   3 |   3 |         30

У меня есть другая таблица observed_data:

 id | lat | lon | observed | error
----+-----+-----+----------+-------
  1 |   1 |   1 |       11 |
  2 |   2 |   2 |       25 |
  3 |   3 |   3 |       32 |

Я хочу заполнить столбец errorobserved_data.Для первой строки я бы сделал:

UPDATE observed_data 
SET error = 
((SELECT predicted FROM predicted_data WHERE lat = 1 AND lon = 1) - (SELECT observed FROM observed_data WHERE lat = 1 AND lon = 1)) 
WHERE lat = 1 AND lon = 1 AND id = 1;

Есть ли какой-нибудь способ, которым я могу написать этот запрос, чтобы я делал это для каждой отдельной строки сразу?

Мой окончательный результат должен быть:

 id | lat | lon | observed | error
----+-----+-----+----------+-------
  1 |   1 |   1 |       11 |    -1
  2 |   2 |   2 |       25 |    -5
  3 |   3 |   3 |       32 |    -2

1 Ответ

6 голосов
/ 07 июля 2019

Вы можете использовать ОБНОВЛЕНИЕ с объединением:

update observed_data as od
  set error = pd.predicted - od.observed
from predicted_data as pd 
where (pd.lat, pd.long) = (od.lat, od.long);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...