Est-il OK de regrouper par géométrie?
Nous comptons beaucoup de points par géométrie polygonale, ce qui implique de couper les données en premier afin de compter les instances des élèves. par limite d'école, groupe de blocs, etc.:
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
La deuxième étape consiste à encapsuler dans une sous-requête afin de joindre la géométrie de la table des polygones à la requête de comptage:
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
Mais il semble que vous pouvez également utiliser la géométrie dans 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
L'inclusion de la géométrie dans GROUP BY est-elle une approche correcte?
GROUP BY
vous rapporte? N'est-il pas joignable par une clé unique denbhd_id
? Vous élargissez le tri, ce qui augmente le temps d'exécution, éventuellement de plus d'une jointure ultérieure.