sql >> Databáze >  >> RDS >> PostgreSQL

Rekurzivní dotaz se součtem v Postgresu

Toto je zjednodušená verze @a_horse's správné odpověď (po diskuzi s OP v komentářích).
Funguje s jakýmikoli (přiměřeně konečný) počet úrovní v rekurzi.

Celková cena za dané 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;

Celková cena za všechny 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 zde (se správným testovacím případem)
Starý sqlfiddle



  1. je dobré ukládat desetinnou hodnotu jako varchar v mysql?

  2. Získejte všechny jedinečné roky ze sloupce data pomocí SQL (MySQL)

  3. Získejte prvních n záznamů pro každou skupinu seskupených výsledků

  4. Jak auditovat databázi PostgreSQL