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

SQL dwa kryteria z jednego group-by

To może być radykalnie prostsze :

SELECT DISTINCT ON (b, c, e, f)
       b, c, e, f, id   -- add more columns freely
FROM   (<duplicate query here>) sub
ORDER  BY b, c, e, f, (a IS NOT NULL), id
  • Twoje zduplikowane zapytanie zawiera wszystkie kolumny. Nie ma potrzeby JOIN do tabeli podstawowej.

  • Użyj rozszerzenia Postgres standardowego SQL DISTINCT :DISTINCT ON :

  • Postgres ma odpowiedni typ logiczny. Możesz ORDER BY wyrażenie logiczne bezpośrednio. Sekwencja to FALSE (0), TRUE (1), NULL (ZERO). Jeśli a ma wartość NULL, to wyrażenie to FALSE i sortuje najpierw:(a IS NOT NULL) . Reszta jest uporządkowana według id . Voila.

  • Wybór ID dzieje się automatycznie. Zgodnie z Twoim opisem chcesz, aby identyfikator wiersza wybranego w tym zapytaniu. Nic więcej do zrobienia.

  • Prawdopodobnie możesz zintegrować to bezpośrednio ze zduplikowanym zapytaniem.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zakleszczenia w PostgreSQL podczas uruchamiania UPDATE

  2. Czy możliwe jest użycie dwóch różnych baz danych dla aplikacji internetowej offline?

  3. Przyznaj użytkownikowi uprawnienia do nowych tabel utworzonych w postgresql

  4. Upuszczanie kolumny w Postgresie na dużym zbiorze danych

  5. Jak przekonwertować ciągi dat na znacznik czasu bez znajomości formatu daty?