Можно ли группировать по геометрии?
Мы много подсчитываем точки по геометриям многоугольника, что включает в себя пересечение данных в первую очередь, чтобы подсчитать количество учеников. по школьной границе, группе блоков и т.д .:
SELECT
n.nbhd_id
, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)
WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id
Второй шаг - завернуть в подзапрос, чтобы объединить геометрию из таблицы полигонов обратно в запрос подсчета:
SELECT
count.*
, n.nbhd_name
, n.geom
FROM (
SELECT
n.nbhd_id
, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)
WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id
) AS count
JOIN denver.neighborhoods AS n
ON count.nbhd_id = n.nbhd_id
Но, похоже, вы также можете использовать геометрию в GROUP BY:
SELECT
n.nbhd_id
, n.nbhd_name
, n.geom
, count(*) AS count_burglaries
FROM denver.crime AS c
JOIN denver.neighborhoods AS n
ON ST_Intersects(c.geom, n.geom)
WHERE c.offense_ty LIKE 'BURG%'
GROUP BY n.nbhd_id, nbhd_name, n.geom
Является ли включение геометрии в GROUP BY правильным подходом?
GROUP BY
вы получаете? Разве это не соединяется уникальным ключомnbhd_id
? Вы расширяете сортировку, что увеличивает время выполнения, возможно, больше, чем последующее соединение.