sql >> Database >  >> RDS >> PostgreSQL

Recursieve zoekopdracht met som in Postgres

Dit is een vereenvoudigde versie van @a_horse's correcte antwoord (na discussie met OP in opmerkingen).
Werkt met elke (redelijk eindig) aantal niveaus in de recursie.

Totale prijs voor gegeven 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;

Totale prijs voor alle projecten

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 hier (met correcte testcase)
Oude sqlfiddle



  1. Ajax, JQuery html-tabel opnieuw bestellen

  2. Hoe is deze records/fanout-logica afgeleid voor het geval zonder statistieken in de Query Planner van MySQL?

  3. mysql join two table met door komma's gescheiden id's

  4. IN-clausule met NULL of IS NULL