[英]SQL sums grouped by either column
我一直在尝试使用 PostgreSQL 解决以下问题,但到目前为止没有运气。 我有一个表transfers
的账号上市汇款:
id | sender | receiver | sum
-----------------------------
1 | 1234 | 2345 | 5.0
2 | 1234 | 9873 | 5.0
3 | 2345 | 7890 | 12.0
4 | 9873 | 7890 | 1.0
还有一个命名的accounts
,包含带有所有者信息的帐户:
account | owner_name
---------------------
1234 | Fred
2345 | Wilma
9873 | Barney
7890 | Betty
因此,使用 PostgreSQL,我需要一个用户名称表,其中总转账金额(任何方向)等于或高于给定阈值(例如 10.0),按owner_name
排序。 即 Fred,帐户的所有者。 1234发送了5.0,收到了5.0,所以总数是10.0。 Wilma(账户 2345)收到 5.0,发送 12.0。 Barney 收到 5.0 并发送 1.0,所以他的总数是 6.0。 最后,Betty 什么也没发送,而是收到了 13.0.0。 三个用户:Fred、Wilma 和 Betty 的总分 >= 10.0,所以他们的名字应该按字母顺序返回,我们应该会收到这样的信息:
result
-------
Betty
Fred
Wilma
可以在一个查询中完成吗?
您可以使用横向连接取消旋转,然后聚合:
select v.account, sum(t.sum) as overall
from transfers cross join lateral
(values (sender), (receiver)
) v(account) join
accounts a
on a.account = v.account
group by v.account
having sum(t.sum) >= 10.0;
您可以使用 union all 来获取所有交易的数据集,包括发送方和接收方,然后对于 sum(sum)>10 的那些,找到帐户名称。
select
(select account a from accounts where a.account=p.id) as name
from (
select sender as p, sum
from transfers
union all
select receiver as p, sum
)
group by p
having sum(sum)>10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.