最近,我正在研究数据,以便为公司创建报告,这是SQL新手。
我有儿童器官的原始数据,同时,我还需要计算它的父母器官的总量。
我使用完全外连接将所有器官放在一个表中,添加一列" parent_organ"表明他们的关系,如图所示:
我有时会使用下面的SQL查询,但失败了,任何人都可以帮忙吗?感谢。
SELECT ORGAN,
SUM(CASE WHEN parent_organ LIKE '%'||ORGAN||'%' THEN
sales
ELSE 0 END) AS sales_sum
FROM table GROUP BY organ
答案 0 :(得分:0)
Postgres我假设,||
串联?从完整的外部联接行集:
SELECT organ, sales FROM test WHERE parent IS NOT NULL
UNION
SELECT a.organ, sum(b.sales)
FROM test a
JOIN test b ON b.parent LIKE '%'||a.organ||'%'
GROUP BY a.organ;
这显然不是很好,因为它会使您的原始连接变得多余:它运行两个查询并简单地将结果推送到一起。如果没有完整的外连接并编辑每个查询以从原始源获取数据,你会更好。
我不认为你提供的设置有更好的方法。如果父子关系是一个正确的外键,你可能会从原始表中获得GROUPING SETS
的某个位置,但这不适用于您正在进行的字符串匹配。