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

Limitar unión a una fila

SELECT (count(*) * sum(s."price")) AS amount
     , 'rma'       AS "creditType"
     , c."company" AS "client"
     , c.id        AS "ClientId"
     , r.* 
FROM   "Rmas"            r
JOIN   "EsnsRmas"        er ON er."RmaId" = r."id"
JOIN   "Esns"            e  ON e.id = er."EsnId"
JOIN  (
   SELECT DISTINCT ON ("EsnId") *
   FROM   "EsnsSalesOrderItems"
   ORDER  BY "EsnId", "createdAt" DESC
   )                     es ON es."EsnId" = e."id"
JOIN   "SalesOrderItems" s  ON s."id" = es."SalesOrderItemId"
JOIN   "Clients"         c  ON c."id" = r."ClientId"
WHERE  r."credited" = FALSE
AND    r."verifyStatus" IS NOT NULL 
GROUP  BY c.id, r.id;

Su consulta en la pregunta tiene un agregado ilegal sobre otro agregado:

sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount

Simplificado y convertido a sintaxis legal:

(count(*) * sum(s."price")) AS amount

Pero, ¿de verdad quieres multiplicar con el conteo por grupo?

Recupero la única fila por grupo en "EsnsSalesOrderItems" con DISTINCT ON . Explicación detallada:

También agregué alias de tabla y formato para que la consulta sea más fácil de analizar para los ojos humanos. Si pudieras evitar el caso camello podría deshacerse de todas las comillas dobles nublando la vista.