У меня 2 стола. Первая таблица содержит следующие столбцы: Start_latitude, start_longitude, end_latitude, end_longitude, sum. Столбец суммы пуст и должен быть заполнен на основе второй таблицы.
Вторая таблица содержит 3 столбца: point_latitude, point_longitude.
Таблица 1
-------------------------
|45 | 50 | 46 | 51 | null|
----|---------------------
|45 | 54 | 46 | 57 | null|
--------------------------
Таблица 2:
---------------
| 45.5 | 55.2 |
---------------
| 45.8 | 50.6 |
---------------
| 45.2 | 56 |
---------------
Нулевые значения в table1-row1 будут равны 1, а в row2 - 2. Это количество точек, лежащих в пределах ограничивающей рамки.
Я могу сделать это на Python, написав функции для чтения значений между фреймами данных. Как это можно сделать в Postgresql. Это пример постановки задачи, которую я придумал для своей ситуации.
Обновлять Эта версия была протестирована на PostgreSql 9.3 с использованием SQL Fiddle.
UPDATE table1 a
SET sum = sub.point_count
FROM (SELECT a.start_lat, a.end_lat, a.start_lon, a.end_lon, COUNT(*) as point_count
FROM table1 a, table2 b
WHERE b.point_lat BETWEEN start_lat AND a.end_lat
AND b.point_lon BETWEEN a.start_lon AND a.end_lon
GROUP BY a.start_lat, a.end_lat, a.start_lon, a.end_lon) as sub
WHERE a.start_lat = sub.start_lat
AND a.end_lat = sub.end_lat
AND a.start_lon = sub.start_lon
AND a.end_lon = sub.end_lon;
Оригинальный ответ
Вот мое решение, оно протестировано на MySQL, но в этом коде нет ничего конкретного, поэтому он должен работать и на PostgreSql.
UPDATE table1 a,
(SELECT a.start_lat, a.end_lat, a.start_lon, a.end_lon, COUNT(*) as count
FROM table1 a, table2 b
WHERE b.point_lat BETWEEN start_lat AND a.end_lat
AND b.point_lon BETWEEN a.start_lon AND a.end_lon
GROUP BY a.start_lat, a.end_lat, a.start_lon, a.end_lon) as sub
SET sum = count
WHERE a.start_lat = sub.start_lat
AND a.end_lat = sub.end_lat
AND a.start_lon = sub.start_lon
AND a.end_lon = sub.end_lon
Обратите внимание, что этот запрос был бы намного короче, если бы table1 содержал столбец PK Id.
В ваших таблицах нет столбцов с идентификаторами?