postgres 中子产品的递归列表 SQL

Recursive list of sub products in postgres SQL

我有一个关于 Postgres 的快速问题 SQL。

我的目标是 产品 table 我们有 1 个或多个父产品,然后是某些子产品。

另外一个table sales我就写了某个产品的销量

现在我的 SQL:

我基本上想检索每个父级产品的所有销售额,在我的示例中,手机和家庭以及子产品的销售额总和。

我的 SQL 到目前为止:

WITH RECURSIVE assignDepth (id, depth, parent) AS (
  SELECT p.id, 0 as depth, p.parent
  FROM product p
  WHERE p.parent IS NULL
  UNION ALL
  SELECT p.id, c.depth+1, p.parent
  FROM product p, assignDepth c
  WHERE p.parent = c.id
 ),
  getProductValue (id, name, value, parent) AS (
   SELECT p.id, p.name, 0 as value, p.parent
   FROM product p,
   WHERE p.depth = (SELECT MAX(depth) FROM assignDepth)
   UNION ALL
         SELECT p.id, p.name,SUM(
             SELECT s.value
             FROM sales s
             WHERE c.id = s.product), p.parent
   FROM product p, getProductValue c
   WHERE p.id = c.parent
 )
SELECT * FROM getProductValue;

提前致谢,如有任何帮助,我们将不胜感激! :)

我只用了一次递归就自己解决了。

WITH RECURSIVE getProductValue (i, n, par) AS 
(SELECT id as i, name as n, id as par FROM product
  UNION all 
        SELECT product.id AS i, product.name AS n, getProductValue.par 
        FROM product, getProductValue  
        WHERE product.parent=getProductValue.i)
SELECT par, SUM(value) 
FROM getProductValue, sales 
WHERE par<>i 
AND sales.product=getProductValue.i 
GROUP by par;

如果有人感兴趣,这就是解决方案!