¿Está bien agrupar por geometría?
Hacemos muchos puntos de recuento por geometrías de polígonos, lo que implica la intersección de los datos primero para contar instancias de estudiantes. por límite escolar, grupo de bloques, 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
El segundo paso es ajustar una subconsulta para unir la geometría de la tabla de polígonos a la consulta de recuento:
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
Pero parece que también puedes usar geometría en 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
¿Incluir geometría en GROUP BY es un enfoque correcto?
postgis
grouping
st-geometry
DPSSpacial
fuente
fuente
GROUP BY
te gana? ¿No se puede unir con una clave única denbhd_id
? Está ampliando el orden, lo que aumenta el tiempo de ejecución, posiblemente en más de una unión posterior.Respuestas:
Es casi seguro que no hay nada malo en agrupar por geometría en este caso, ya que ya está agrupando por un ID único (
nbhd_id
). Y, como usted señala, le ahorra una unión y hace que la consulta sea más limpia.Es importante saber que una
GROUP BY geom
cláusula en PostGIS 2.3 y anteriores en realidad agrupa filas basadas en la igualdad del cuadro delimitador, no en la igualdad geométrica. Con datos reales no inventados, esto a menudo tiene el mismo efecto que agrupar en igualdad geométrica (y es mucho más rápido), pero puede no producir los resultados esperados cuando varios polígonos distintos tienen el mismo cuadro delimitador. Comenzando en PostGIS 2.4,GROUP BY
opera en una definición rígida de igualdad geométrica, teniendo en cuenta el punto de inicio y la orientación de las geometrías.Debido a que ya está agrupando
nbhd_id
, aún verá filas separadas incluso si dos polígonos vecinos distintos comparten un cuadro delimitador.fuente