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;
Вашата заявка във въпроса съдържа незаконен агрегат спрямо друг агрегат:
sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount
Опростен и преобразуван в легален синтаксис:
(count(*) * sum(s."price")) AS amount
Но наистина ли искате да умножите с броя на група?
Извличам единичен ред на група в "EsnsSalesOrderItems"
с DISTINCT ON
. Подробно обяснение:
Добавих също псевдоними на таблици и форматиране, за да направя заявката по-лесна за анализиране от човешки очи. Ако можехте избягвайте камилския случай, може да се отърве от всички двойни кавички замъгляване на гледката.