sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL två kriterier från en grupp-för

Detta kan vara radikalt enklare :

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
  • Din dubblettfråga har alla kolumner. Inget behov av att JOIN till basbordet igen.

  • Använd Postgres-tillägget av standard SQL DISTINCT :DISTINCT ON :

  • Postgres har en ordentlig boolesk typ. Du kan ORDER BY booleskt uttryck direkt. Sekvensen är FALSE (0), TRUE (1), NULL (NULL). Om a är NULL är detta uttryck FALSE och sorterar först:(a IS NOT NULL) . Resten sorteras efter id . Voilá.

  • Val av ID sker automatiskt. Enligt din beskrivning vill du ha ID för raden som väljs i denna fråga. Inget mer att göra.

  • Du kan förmodligen integrera detta i din dubblettfråga direkt.




  1. PostgreSQL använder pg_trgm långsammare än full scan

  2. Inkludera kolumnnamn i resultaten av en Oracle SQL-fråga?

  3. Varför inte använda de inbyggda MySQL-användarna och behörigheterna för en webbplats?

  4. MySQL ger läs ECONNRESET-fel efter inaktiv tid på node.js-servern