Ist es in Ordnung, nach Geometrie zu gruppieren?
Wir zählen viele Punkte anhand von Polygongeometrien, wobei die Daten zuerst geschnitten werden, um Instanzen von Schülern zu zählen. nach Schulgrenze, Blockgruppe usw.:
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
Der zweite Schritt ist das Einschließen einer Unterabfrage, um die Geometrie aus der Polygontabelle wieder mit der Zählabfrage zu verknüpfen:
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
Sie können Geometrie aber auch in GROUP BY verwenden:
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
Ist die Einbeziehung von Geometrie in GROUP BY ein korrekter Ansatz?
GROUP BY
dir das? Ist es nicht mit einem eindeutigen Schlüssel von verbindbarnbhd_id
? Sie erweitern die Sortierung, wodurch sich die Laufzeit möglicherweise um mehr als einen nachfolgenden Join erhöht.