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;
Ihre Abfrage in der Frage hat ein unzulässiges Aggregat gegenüber einem anderen Aggregat:
sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount
Vereinfacht und in legale Syntax umgewandelt:
(count(*) * sum(s."price")) AS amount
Aber wollen Sie wirklich mit der Anzahl pro Gruppe multiplizieren?
Ich rufe die einzelne Zeile pro Gruppe in "EsnsSalesOrderItems"
ab mit DISTINCT ON
. Ausführliche Erklärung:
Ich habe auch Tabellenaliase und Formatierungen hinzugefügt, um die Abfrage für das menschliche Auge leichter parsen zu können. Wenn Sie Kamelfall vermeiden könnten könnte alle doppelten Anführungszeichen loswerden trübt die Sicht.