PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie rekurencyjne z sumą w Postgresie

To jest uproszczona wersja poprawny @a_horse odpowiedz (po dyskusji z OP w komentarzach).
Działa z każdym (rozsądnie skończona) liczba poziomów w rekurencji.

Całkowita cena za podany project_id

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;

Cena łączna za wszystkie projekty

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 tutaj (z poprawnym przypadkiem testowym)
Stary 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. Pojawia się następujący błąd — Nie znaleziono odpowiedniego sterownika dla jdbc:postgresql://localhost:5432/testDBMS

  2. pgDash Alternatives - Monitorowanie bazy danych PostgreSQL za pomocą ClusterControl

  3. Zapytanie PostgreSQL SQL do przemierzania całego nieskierowanego grafu i zwracania wszystkich znalezionych krawędzi

  4. Jak zaindeksować kolumnę tablicy ciągów dla zapytania pg_trgm `'term' % ANY (array_column)`?

  5. Jak mogę uzyskać nazwę tabeli w funkcji wyzwalacza PostgreSQL?