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;
如果有人感兴趣,这就是解决方案!
我有一个关于 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;
如果有人感兴趣,这就是解决方案!