sql - 将多个 "group by"组合成单个查询?

标签 sql postgresql

我正在尝试根据不同的“分组依据”对值求和/计算值,但无法弄清楚如何在单个查询中执行此操作。

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/

相关文章:

sql - 删除临时表时如何避免删除静态表

php - PHP如何从两个不同的表中获取信息

json - 无法从标量中提取元素 - postgresql 错误

postgresql - 使用许多常见的子表达式进行更新

sql - 在sql oracle中使用regexp_substr获取特定单词后的单词

sql - 在数据库或文件系统中处理的同步 INSERT/SELECT 事务或读/写操作

sql - 从 Postgres 中选择截断的字符串

JAVA,检索值时出现SQL异常

SQL - 优化批量插入和大型连接的性能?

macos - 将 JSON-C 添加到现有的 POSTGIS 安装