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.