Подсчет количества точек в разных диапазонах SQL - PullRequest
0 голосов
/ 09 мая 2018

У нас есть пункт недвижимости X. Мы хотим рассчитать количество станций в пределах

0-200 m
200-400 m
400-600 m

После того, как я получу это, я позже создам новую таблицу, где они суммируются в соответствии с математическими выражениями.

    SELECT loc_dist.id, loc_dist.namn1, grps.grp, count(*)
FROM (
SELECT b.id, b.namn1, ST_Distance_Sphere(b.geom, s.geom) AS dist
FROM stations s, bostader b) AS loc_dist
JOIN (
VALUES (1,200.), (2,400.), (3,600.)
) AS grps(grp, dist) ON loc_dist.dist < grps.dist
GROUP BY 1,2,3
ORDER BY 1,2,3;

У меня есть это сейчас, но для запуска требуется вечность, и я не могу получить никаких результатов, так как у меня более 2000 записей от b и s, я хочу количество s из определенного b. Но это рассчитывает для всех, как мне добавить:

WHERE b.id= 114477

например? Я получаю только синтаксическую ошибку при соединении, когда пытаюсь это сделать, я хочу, чтобы групповые расстояния были только от одного или, возможно, от 5 разных b, в зависимости от их b.id

1 Ответ

0 голосов
/ 16 мая 2018

После большой помощи от TA ответ здесь и работает хорошо, добавлены диапазоны и предложение BETWEEN для подсчета в круговых кольцах

SELECT loc_dist.id, loc_dist.namn1, grps.grp, count(*)
    FROM (
    SELECT b.id, b.namn1, ST_Distance_Sphere(b.geom, s.geom) AS dist
    FROM stations s, bostader b WHERE b.id=114477) AS loc_dist
    JOIN (
    VALUES (1,0,200), (2,200,400), (3,400,600)
    ) AS grps(grp, dist_l, dist_u) ON loc_dist.dist BETWEEN dist_l AND dist_u
    GROUP BY 1,2,3
    ORDER BY 1,2,3;
...