基于type列符号对notional列求和的SQL实现需求
没问题,这需求用CASE表达式配合SUM函数就能轻松实现,直接上解决方案和细节说明:
最终SQL语句
SELECT SUM( CASE WHEN type = 'BUY' THEN notional WHEN type = 'SELL' THEN -notional ELSE 0 -- 兼容未定义的交易类型,避免异常值干扰 END ) AS signed_notional_total FROM trades;
代码逻辑拆解
- 符号映射:通过
CASE语句把type转换成对应的符号逻辑:- 遇到
BUY类型,保留notional的正值; - 遇到
SELL类型,把notional转为负值; - 加
ELSE 0是个好习惯,万一表中出现了BUY/SELL之外的交易类型,这些记录不会影响最终求和结果。
- 遇到
- 求和计算:
SUM函数会自动把所有经过符号处理后的notional值累加,最终得到带符号的总金额,我们给结果列起了个清晰的别名signed_notional_total。
验证你的测试数据
用你提供的初始化数据跑这条SQL,计算过程是这样的:
- 两条BUY记录的总和:20000 + 20000 = 40000
- 三条SELL记录的总和:-100000 - 400000 - 600000 = -1100000
- 最终总金额:40000 + (-1100000) = -1060000
完全符合你要的带符号求和需求~
内容的提问来源于stack exchange,提问作者BlueTrin
相关产品推荐
相关产品推荐

