Обновление результата запроса (длина, количество) в таблице

Ответить
HasT
Активный участник
Сообщения: 142
Зарегистрирован: 16 окт 2009, 22:08
Репутация: 55
Откуда: Харьков

Обновление результата запроса (длина, количество) в таблице

Сообщение HasT » 03 дек 2012, 16:44

В базе данных содержится линейный (дороги) и полигональный слой (города).
Необходимо получить количество линейных объектов и длину линейной геомтерии для каждого полигонального объекта (слой городов).
В pgAdmin выполняю запрос:

Код: Выделить всё

SELECT
     m."TownName",
sum(ST_Length_Spheroid(r.the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS Roads_Km,
count(*) AS Roads_Count
FROM
     "Streets" AS r,
     "Towns" AS m
WHERE ST_Intersects(m.the_geom, r.the_geom)
GROUP BY
     m."TownName"
ORDER BY
     m."TownName";
и результат сохраняю в csv таблицу.
Помогите с запросом, чтобы результат длины и количества линейной геометрии сохранялся в предварительно добавленные колонки (Length, Counts) полигонального слоя городов (при выполнении запроса выполнялось обновление значений) и +добавлялось время выполнения запроса в колонку TimeRun полигонального слоя.
Спасибо!

Shifted
Интересующийся
Сообщения: 23
Зарегистрирован: 09 дек 2009, 15:00
Репутация: 0

Re: Обновление результата запроса (длина, количество) в табл

Сообщение Shifted » 05 дек 2012, 10:24

можно использовать примерно такую структуру:

Код: Выделить всё

select   data1,
            ... ,
           (select  sum(*) from t1 where ....  order by ... ) as sum,
           (select  count(*) from t2 where ....  order by ... ) as count
from t1 where ....  order by ... 

HasT
Активный участник
Сообщения: 142
Зарегистрирован: 16 окт 2009, 22:08
Репутация: 55
Откуда: Харьков

Re: Обновление результата запроса (длина, количество) в табл

Сообщение HasT » 12 дек 2012, 17:20

С запросом разобрался. Ниже необходимый запрос:

Код: Выделить всё

UPDATE town t
SET 
length =calc.roadskm, -- column length in towns table
count = calc.roadscount, -- column count in towns table
updatetime = calc.time -- column updatetime in towns table
FROM (
SELECT
m.townname,
sum(ST_Length_Spheroid(r.the_geom,'SPHEROID["WGS 84",6378137,298.257223563]'))/1000 AS roadskm,
count(*) AS roadscount,
now() as time
FROM
streets AS r, --linear layer of roads
town AS m --polygonal layer of towns
WHERE ST_Intersects(m.the_geom, r.the_geom)
GROUP BY
m.townname
) calc 
WHERE t.townname = calc.townname;

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей