sql >> Database >  >> RDS >> PostgreSQL

SQL twee criteria uit één groep-by

Dit kan radicaal eenvoudiger :

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
  • Uw dubbele zoekopdracht heeft alle kolommen. Het is niet nodig om JOIN weer naar de basistafel.

  • Gebruik de Postgres-extensie van de standaard SQL DISTINCT :DISTINCT ON :

  • Postgres heeft een correct booleaans type. U kunt ORDER BY booleaanse expressie direct. De volgorde is FALSE (0), TRUE (1), NULL (NUL). Als a NULL is, is deze uitdrukking FALSE en sorteert eerst:(a IS NOT NULL) . De rest is gerangschikt op id . Voilá.

  • Selectie van ID gebeurt automatisch. Volgens uw beschrijving wilt u de ID van de rij die in deze zoekopdracht is geselecteerd. Niets meer te doen.

  • U kunt dit waarschijnlijk rechtstreeks in uw dubbele zoekopdracht integreren.




  1. instelling hstore in rails4, dynamische sleutel/waarden

  2. Oracle-beveiligingswaarschuwing voor CVE-2021-44228

  3. De EXECUTE-toestemming is geweigerd voor het object 'xxxxxxx', database 'zzzzzzz', schema 'dbo'

  4. Postgres SQL-query om foutgegevens samen te vatten