Czy można grupować według geometrii?
Wykonujemy wiele punktów zliczania według geometrii wielokątów, co polega na przecięciu danych w celu zliczenia wystąpień studentów. według granicy szkoły, grupy bloków itp .:
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
Drugim krokiem jest zawinięcie zapytania częściowego w celu połączenia geometrii z tabeli wielokątów z powrotem do zapytania zliczającego:
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
Wygląda jednak na to, że możesz także używać geometrii w 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
Czy uwzględnienie geometrii w GROUP BY jest poprawnym podejściem?
GROUP BY
zyskujesz? Czy to nie łączy unikalny klucznbhd_id
? Rozszerzasz sortowanie, co wydłuża czas działania, prawdopodobnie o więcej niż kolejne przyłączenie.