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;
Din forespørgsel i spørgsmålet har et ulovligt aggregat over et andet aggregat:
sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount
Forenklet og konverteret til lovlig syntaks:
(count(*) * sum(s."price")) AS amount
Men vil du virkelig gange med antallet pr. gruppe?
Jeg henter den enkelte række pr. gruppe i "EsnsSalesOrderItems"
med DISTINCT ON
. Detaljeret forklaring:
Jeg tilføjede også tabelaliasser og formatering for at gøre forespørgslen nemmere at parse for menneskelige øjne. Hvis du kunne undgå kamel tilfælde kunne slippe af med alle de dobbelte anførselstegn uklar udsigten.