计算不同范围内的点数 SQL
Count number of points within different ranges SQL
我们有房地产点 X。
我们要计算
以内的站数
0-200 m
200-400 m
400-600 m
有了这个之后,我稍后会创建一个新的 table,其中根据数学表达式汇总了这些内容。
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 的条目,我想要特定 b 的 s 数量。但这对所有计算,我如何添加:
WHERE b.id= 114477
比如?当我尝试这样做时,我只在连接上遇到语法错误,我只想要一个或可能 5 个不同 b 的组距离,具体取决于它们的 b.id
在 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;
我们有房地产点 X。 我们要计算
以内的站数0-200 m
200-400 m
400-600 m
有了这个之后,我稍后会创建一个新的 table,其中根据数学表达式汇总了这些内容。
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 的条目,我想要特定 b 的 s 数量。但这对所有计算,我如何添加:
WHERE b.id= 114477
比如?当我尝试这样做时,我只在连接上遇到语法错误,我只想要一个或可能 5 个不同 b 的组距离,具体取决于它们的 b.id
在 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;