PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SQL deux critères d'un group-by

Cela peut être radicalement plus simple :

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
  • Votre requête en double contient toutes les colonnes. Pas besoin de JOIN à la table de base.

  • Utilisez l'extension Postgres du standard SQL DISTINCT :DISTINCT ON :

  • Postgres a un type booléen approprié. Vous pouvez ORDER BY expression booléenne directement. La séquence est FALSE (0), TRUE (1), NULL (NUL). Si a est NULL, cette expression est FALSE et trie en premier :(a IS NOT NULL) . Le reste est classé par id . Voilà.

  • Sélection de ID se produit automatiquement. Selon votre description, vous voulez l'ID de la ligne sélectionnée dans cette requête. Plus rien à faire.

  • Vous pouvez probablement l'intégrer directement dans votre requête en double.