sql >> Base de Datos >  >> RDS >> PostgreSQL

SQL dos criterios de un grupo por

Esto puede ser radicalmente más 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
  • Su consulta duplicada tiene todas las columnas. No es necesario JOIN a la tabla base de nuevo.

  • Use la extensión Postgres del SQL estándar DISTINCT :DISTINCT ON :

  • Postgres tiene un tipo booleano adecuado. Puedes ORDER BY expresión booleana directamente. La secuencia es FALSE (0), TRUE (1), NULL (NULO). Si a es NULL, esta expresión es FALSE y ordena primero:(a IS NOT NULL) . El resto está ordenado por id . Voilá.

  • Selección de ID ocurre automáticamente. De acuerdo con su descripción, desea el ID de la fila seleccionada en esta consulta. Nada más que hacer.

  • Probablemente pueda integrar esto en su consulta duplicada directamente.