Para que quede claro, parece que quiere contar las rutas por condado. Supongo que routes
es un (MULTI)LINESTRING
y counties
es un (MULTI)POLYGON
. También ha indicado que ambas tablas utilizan el mismo SRID (4269).
El ERROR: relation "counties" does not exist
es impar, pero usted dice en los comentarios que SELECT count(*), name FROM public."Counties" group by name;
está funcionando. ¿Lo estás ejecutando? exactamente ¿en ese sentido? Porque si es así, parece que has definido la tabla utilizando un identificador entre comillas en mayúsculas para "Counties"
, lo que hará que no coinciden con counties
, "counties"
o "COUNTIES"
. En general, los desarrolladores de Postgres evitarán el uso de mayúsculas en los nombres de los identificadores precisamente por esta razón, para evitar tener que hacer coincidir exactamente las mayúsculas y minúsculas en los identificadores de doble comilla.
Suponiendo que ese sea el problema, deberías poder obtener el recuento que deseas utilizando:
SELECT counties.name, COUNT(*) AS route_count
FROM counties JOIN routes
ON ST_Intersects(counties.geom, routes.geog1)
GROUP BY counties.name;
El ST_Intersection()
que tenía en su consulta original no es una función agregada y, por lo tanto, no puede utilizarse en la lista de selección si está utilizando GROUP BY
. Si lo que se quiere es que las geometrías de las rutas intersectadas aparezcan en el conjunto de resultados, se trata de una consulta diferente.
¿Las rutas están completamente contenidas por los condados? Si alguna ruta cruza la frontera de un condado, se contabilizará en ambos condados intersectados. Pero cambiar a algo como ST_Contains
no contarlos si cruzan al condado vecino. Elige tu veneno.