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;
Truy vấn của bạn trong câu hỏi có một tổng hợp bất hợp pháp trên một tổng hợp khác:
sum((select count(*) as itemCount) * "SalesOrderItems"."price") as amount
Đơn giản hóa và chuyển đổi sang cú pháp hợp pháp:
(count(*) * sum(s."price")) AS amount
Nhưng bạn có thực sự muốn nhân với số lượng mỗi nhóm không?
Tôi truy xuất một hàng cho mỗi nhóm trong "EsnsSalesOrderItems"
với DISTINCT ON
. Giải thích chi tiết:
Tôi cũng đã thêm bí danh và định dạng bảng để làm cho truy vấn dễ dàng hơn để phân tích cú pháp đối với mắt người. Nếu bạn có thể tránh trường hợp lạc đà, bạn có thể loại bỏ tất cả các dấu ngoặc kép che phủ khung cảnh.