我有一个关于 Postgres SQL 的快速问题。
我的目标是创建一个产品表,其中我们有 1 个或多个父产品,然后是某些子产品。
在另一个表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;
如果有人感兴趣,这就是解决方案!
关于sql - postgresQL 中子产品的递归列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40654457/