获取连接列 SQL 的总和
Posted
技术标签:
【中文标题】获取连接列 SQL 的总和【英文标题】:Take sum of a concatenated column SQL 【发布时间】:2021-11-01 01:55:56 【问题描述】:我想使用互动的后期和前期收入来计算净收入。有时,交互中有多个客户。数据如下:
InteractionID | Customer ID | Pre | Post
--------------+-------------+--------+--------
1 | ab12 | 10 | 30
2 | cd12 | 40 | 15
3 | de12;gh12 | 15;30 | 20;10
预期输出是在调用前后求和以计算净值
InteractionID | Customer ID | Pre | Post | Net
--------------+---------------+--------+-------+------
1 | ab12 | 10 | 30 | 20
2 | cd12 | 40 | 15 | -25
3 | de12;gh12 | 45 | 30 | -15
如何获得净收入列?
【问题讨论】:
如果有超过 1 个客户,您希望 (20+10) - (15+30) 作为您的网络吗? @Arun 是的,以上是正确的。也可以有 2 个以上的客户。客户数量应该是动态的。 【参考方案1】:正确的解决方案是通过为客户及其各自的pre
和post
添加单独的表来规范您的关系设计。
虽然坚持当前的设计,但可以这样做:
SELECT *, post - pre AS net
FROM (
SELECT interaction_id, customer_id
,(SELECT sum(x::numeric) FROM string_to_table(pre, ';') x) AS pre
,(SELECT sum(x::numeric) FROM string_to_table(post, ';') x) AS post
FROM tbl
) sub;
db小提琴here
string_to_table()
至少需要 Postgres 14。
您没有声明您的 Postgres 版本,因此我假设当前版本为 Postgres 14。
对于旧版本,请替换为 regexp_split_to_table()
或 unnest(string_to array))
。
【讨论】:
以上是关于获取连接列 SQL 的总和的主要内容,如果未能解决你的问题,请参考以下文章