Hai vấn đề:
- Giống như thông báo lỗi cho bạn biết, geom cần được bao bọc trong một hàm tổng hợp nếu nó không được liệt kê trong
GROUP BY
. Bạn chỉ có thể sử dụngmin()
... - Bạn đã hiểu ngược logic của mình. Nó phải là
COUNT(*) = 1 OR ..
Nhưng điều này có thể được giải quyết dễ dàng hơn với tính năng chống bán tham gia bằng cách sử dụng 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;
Thay thế pk_column
với (các) cột khóa chính thực tế của bạn.