SQL Partition By 计算净值

Posted

技术标签:

【中文标题】SQL Partition By 计算净值【英文标题】:SQL Partition By to calculate Net Value 【发布时间】:2020-04-23 09:01:13 【问题描述】:

想象一个订单系统,有多个订单,两边分别是买入和卖出。 数据集是这样的

我想计算净值,即(所有买方的总和 - 所有卖方的总和)

预期输出:

我目前使用 Partition By 来得到以下输出

SELECT 
[NAME]
,[Side]
,[Value]
,SUM([Value]) OVER (PARTITION BY [NAME],[Side]) as Net
FROM 
[Order]

输出:

但我不知道如何减去这些值并得出预期的结果。

【问题讨论】:

【参考方案1】:

您可以使用带有条件逻辑的窗口函数

select
    t.*,
    sum(case side when 'B' then value when 'S' then -value end) 
        over(partition by name) net
from mytable t

【讨论】:

以上是关于SQL Partition By 计算净值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Snowflake sql 中使用 partition by 和 order by 计算不同的值?

基于 OVER PARTITION BY 子句的 SQL 计算列

【SQL】partition by

SQL 查询 - GROUP BY , PARTITION BY

SQL Server: Difference between PARTITION BY and GROUP BY

order by 在 POSTGRESQL 中的 partition by 子句中不起作用?