PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Giới hạn tham gia vào một hàng

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tổng quan về Serial Pseudo-Datatype cho PostgreSQL

  2. Cách tạo biểu đồ trong PostgreSQL

  3. Cách nhanh nhất để thực hiện truy vấn xóa trong bảng lớn trong PostgreSQL

  4. PostgreSQL Tạo chỉ mục

  5. Tại sao việc lặp lại một QuerySet Django lớn lại tiêu tốn một lượng lớn bộ nhớ?