PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kueri rekursif dengan jumlah di Postgres

Ini adalah versi sederhana dari benar @a_horse jawab (setelah berdiskusi dengan OP di komentar).
Bekerja dengan apa saja (cukup terbatas) jumlah level dalam rekursi.

Total harga untuk project_id yang diberikan

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;

Total harga untuk semua proyek

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 di sini (dengan test case yang benar)
Lama 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. sqlalchemy dan peningkatan otomatis dengan postgresql

  2. Opsi drop-down bentuk python diisi oleh sql

  3. Bagaimana tepatnya fungsi putaran di postgresql?

  4. psycopg2.ProgrammingError:kesalahan sintaks pada atau di dekat kesalahan stdin saat mencoba menyalin_dari pergeseran merah

  5. Jumlahkan sampai nilai ambang tercapai dan kemudian setel ulang penghitung