PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

SQL due criteri da un raggruppamento

Questo può essere radicalmente più semplice :

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
  • La tua query duplicata ha tutte le colonne. Non c'è bisogno di JOIN di nuovo al tavolo di base.

  • Usa l'estensione Postgres dello standard SQL DISTINCT :DISTINCT ON :

  • Postgres ha un tipo booleano appropriato. Puoi ORDER BY direttamente l'espressione booleana. La sequenza è FALSE (0), TRUE (1), NULL (NULLO). Se a è NULL, questa espressione è FALSE e ordina prima:(a IS NOT NULL) . Il resto è ordinato per id . Voilà.

  • Selezione di ID avviene automaticamente. In base alla tua descrizione desideri l'ID della riga selezionata in questa query. Niente più da fare.

  • Probabilmente puoi integrarlo direttamente nella tua query duplicata.