Deux problèmes :
- Comme le message d'erreur vous l'indique, geom doit être enveloppé dans une fonction d'agrégation s'il n'est pas répertorié dans
GROUP BY
. Vous pouvez simplement utilisermin()
... - Vous avez votre logique à l'envers. Il doit être
COUNT(*) = 1 OR ..
Mais cela peut être résolu de manière plus élégante avec une anti-semi-jointure en utilisant 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;
Remplacer pk_column
avec votre ou vos colonne(s) de clé primaire réelle(s).