【发布时间】:2015-08-12 11:43:31
【问题描述】:
Postgres 9.3.5,PostGIS 2.1.4。
我在数据库中有两个表(polygons 和 points)。
我想知道每个polygon 中有多少points。每个多边形将有 0 个点或超过 200000 个。小问题如下。
我的point 表如下所示:
x y lan
10 11 en
10 11 fr
10 11 en
10 11 es
10 11 en
- #just for demonstration/clarification purposes
13 14 fr
13 14 fr
13 14 es
-
15 16 ar
15 16 ar
15 16 ps
我不想简单地计算每个多边形的点数。我想知道每个多边形中最常出现的lan 是什么。因此,假设每个- 都表示这些点正在落入一个新的多边形中,我的结果将如下所示:
Polygon表:
polygon Count lan
1 3 en
2 2 fr
3 2 ar
这是我目前得到的。
SELECT count(*), count.language AS language, hexagons.gid AS hexagonsWhere
FROM hexagonslan AS hexagons,
points_count AS france
WHERE ST_Within(count.geom, hexagons.geom)
GROUP BY language, hexagonsWhere
ORDER BY hexagons DESC;
它给了我以下信息:
Polygon Count language
1 3 en
1 1 fr
1 1 es
2 2 fr
2 1 es
3 2 ar
3 1 ps
有两件事尚不清楚。
- 如何只获取最大值?
- 如果最大值可能相同,将如何处理?
【问题讨论】:
-
第二个问题应该是你自己回答的,你希望这些人怎么处理?
-
@JakubKania 我想知道它是否会引发错误或让我注意到发生了什么。就是这样。
-
这是 groupwise max 的经典案例(一旦你放弃了
ST_Within和插入的性能),所以你应该决定是否要出错。 -
@JakubKania “一旦你放弃 ST_Within 和插入的性能”是什么意思?
标签: sql postgresql postgis greatest-n-per-group groupwise-maximum