È corretto raggruppare per geometria?
Facciamo molti punti di conteggio per geometrie poligonali, il che implica prima di tutto intersecare i dati per contare le istanze degli studenti. per confine della scuola, gruppo di blocchi, ecc .:
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
Il secondo passaggio consiste nell'avvolgere una sottoquery per unire la geometria dalla tabella poligonale alla query conteggio:
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
Ma sembra che puoi anche usare la geometria in 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
Includere la geometria nel GROUP BY è un approccio corretto?
GROUP BY
ti guadagna? Non è associabile con una chiave unica dinbhd_id
? Stai allargando l'ordinamento, aumentando il tempo di esecuzione, probabilmente di più di un join successivo.