Dois problemas:
- Assim como a mensagem de erro informa, geom precisa ser envolvido em uma função agregada se não estiver listado em
GROUP BY
. Você poderia simplesmente usarmin()
... - Você tem sua lógica invertida. Ele precisa ser
COUNT(*) = 1 OR ..
Mas isso pode ser resolvido de forma mais elegante com um 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;
Substitua
pk_column
com sua(s) coluna(s) de chave primária real.