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;
Kueri Anda dalam pertanyaan memiliki agregat ilegal di atas agregat lain:
sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount
Disederhanakan dan dikonversi ke sintaks legal:
(count(*) * sum(s."price")) AS amount
Tapi apakah Anda benar-benar ingin mengalikan dengan hitungan per grup?
Saya mengambil satu baris per grup di "EsnsSalesOrderItems"
dengan DISTINCT ON
. Penjelasan detail:
Saya juga menambahkan alias tabel dan pemformatan untuk membuat kueri lebih mudah diurai untuk mata manusia. Jika Anda dapat hindari kasus unta Anda bisa menghilangkan semua tanda kutip ganda mengaburkan pandangan.