PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQL zwei Kriterien von einem Group-By

Dies kann radikal einfacher sein :

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
  • Ihre doppelte Abfrage enthält alle Spalten. Es ist kein JOIN erforderlich zurück zur Basistabelle.

  • Verwenden Sie die Postgres-Erweiterung des Standard-SQL DISTINCT :DISTINCT ON :

  • Postgres hat einen richtigen booleschen Typ. Sie können ORDER BY boolescher Ausdruck direkt. Die Sequenz ist FALSE (0), TRUE (1), NULL (NULL). Wenn a NULL ist, ist dieser Ausdruck FALSE und sortiert zuerst:(a IS NOT NULL) . Der Rest ist nach id geordnet . Voilá.

  • Auswahl von ID geschieht automatisch. Gemäß Ihrer Beschreibung möchten Sie die ID der in dieser Abfrage ausgewählten Zeile. Nichts mehr zu tun.

  • Sie können dies wahrscheinlich direkt in Ihre doppelte Abfrage integrieren.