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

Truy vấn đệ quy với tổng trong Postgres

Đây là phiên bản đơn giản của @ a_horse's đúng câu trả lời (sau khi thảo luận với OP trong phần nhận xét).
Làm việc với bất kỳ (hữu hạn hợp lý) số cấp trong đệ quy.

Tổng giá cho project_id đã cho

WITH RECURSIVE cte AS (
   SELECT project_id AS project_parent, project_value
   FROM   projects
   WHERE  project_id = 1 -- enter id of the base project here !

   UNION  ALL 
   SELECT p.project_id, p.project_value
   FROM   cte
   JOIN   projects p USING (project_parent)
)
SELECT sum(project_value) AS total_value
FROM   cte;

Tổng giá cho tất cả các dự án

WITH RECURSIVE cte AS (
   SELECT project_id, project_id AS project_parent, project_value
   FROM   projects
   WHERE  project_parent IS NULL  -- all base projects

   UNION  ALL 
   SELECT c.project_id, p.project_id, p.project_value
   FROM   cte c
   JOIN   projects p USING (project_parent)
   )
SELECT project_id, sum(project_value) AS total_value
FROM   cte
GROUP  BY 1
ORDER  BY 1;

db <> fiddle tại đây (với trường hợp thử nghiệm chính xác)
sqlfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dòng lệnh PSQL của Windows:có cách nào cho phép đăng nhập không cần mật khẩu không?

  2. Cách giới hạn quyền truy cập vào cơ sở dữ liệu trong PostgreSQL

  3. Cách sử dụng chỉ mục trong truy vấn SELECT MAX (id) bảng ngoại trong PostgreSQL?

  4. Làm cách nào để lấy min / max của hai số nguyên trong Postgres / SQL?

  5. PostgreSQL - Mệnh đề GROUP BY hoặc được sử dụng trong một hàm tổng hợp