Dos problemas:
- Tal como le indica el mensaje de error, geom debe incluirse en una función agregada si no aparece en
GROUP BY
. Podrías simplemente usarmin()
... - Tienes la lógica al revés. Tiene que ser
COUNT(*) = 1 OR ..
Pero esto se puede resolver de manera más elegante con un anti-semi-join usando NOT EXISTS
:
SELECT s.name, s.admin, st_area(geom)
FROM vector.states s
WHERE st_area(s.geom) > 0.01 -- state big enough ...
OR NOT EXISTS ( -- ... or there are no other counties
SELECT 1 FROM vector.states s2
WHERE s2.admin = s.admin
AND s2.pk_column <> s.pk_column -- exclude self-join
)
ORDER BY s.admin;
Reemplazar pk_column
con su(s) columna(s) de clave principal real.