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 fråga i frågan har ett olagligt aggregat framför ett annat aggregat:
sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount
Förenklad och konverterad till laglig syntax:
(count(*) * sum(s."price")) AS amount
Men vill du verkligen multiplicera med antalet per grupp?
Jag hämtar den enda raden per grupp i "EsnsSalesOrderItems"
med DISTINCT ON
. Detaljerad förklaring:
Jag lade också till tabellalias och formatering för att göra frågan lättare att analysera för mänskliga ögon. Om du kunde undvika kamelfall kunde bli av med alla dubbla citattecken grumlar utsikten.