PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie złożone OR SQL (zapytanie nr 1 z opcją Z) i (zapytanie nr 2) z wyjątkami LICZBA()

Dwa problemy:

  1. Tak jak mówi komunikat o błędzie, geom musi być opakowany w funkcję agregującą, jeśli nie jest wymieniony w GROUP BY . Możesz po prostu użyć min() ...
  2. Masz swoją logikę do tyłu. Musi to być COUNT(*) = 1 OR ..

Ale można to rozwiązać bardziej elegancko za pomocą antysemi-join za pomocą 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;

Zastąp pk_column z rzeczywistymi kolumnami klucza podstawowego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WYBIERZ ISTNIEJE vs. LIMIT 1

  2. Wywołanie procedury składowanej w ramach procedury składowanej

  3. Data do milisekund / milisekund do tej pory

  4. Heroku Postgres DB działa wolniej po aktualizacji

  5. Dlaczego moja sygnatura czasowa została przesunięta w strefie czasowej?