我正在尝试根据不同的“分组依据”对值求和/计算值,但无法弄清楚如何在单个查询中执行此操作。
CREATE TABLE test(
col1 text,
col2 text,
col3 int
);
INSERT INTO test VALUES('A', '', 10);
INSERT INTO test VALUES('A', 'A', 15);
INSERT INTO test VALUES( '', 'A', 100);
INSERT INTO test VALUES('B', 'C', 1);
INSERT INTO test VALUES('C', '', 33);
我已经想出了如何部分获得我正在寻找的东西:
--(this might not be the "correct" way, just my experiments)
SELECT col1 AS name, sum(col3) as col1_sum FROM test GROUP BY col1;
SELECT col2 AS name, sum(col3) as col2_sum FROM test GROUP BY col2;
除上述之外,我还想计算 b_sum - a_sum 的差值,因此完整的查询结果为:
name col1_sum col2_sum difference
---- -------- -------- ----------
A 25 115 90
B 1 (empty) -1
C 33 1 -32
(empty) 100 43 -57
关于如何获得上述输出的任何想法......?谢谢!
最佳答案
我在考虑聚合后的全外连接
:
select coalesce(t1.name, t2.name) as name, t1.col1_num, t2.col2_sum,
coalesce(t2.col2_sum, 0) - coalesce(t1.col1_sum, 0) as diff
from (select col1 as name, sum(col3) as col1_sum
from ttest
group by col1
) t1 full outer join
(select col2 as name, sum(col3) as col2_sum
from ttest
group by col2
) t2
on t1.name = t2.name;
关于sql - 将多个 "group by"组合成单个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43901220/