You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SUM(NVL)改写统计MYR及空值的SQL代码?

用NVL改写你的统计SQL

嘿,我来帮你搞定这个问题!原来的CASE WHEN逻辑没问题,但既然你想用NVL来改写,我们可以这样做:

首先,我们利用NVL()函数把CURRENCY列的空值替换成**'MYR'**,然后判断替换后的值是否等于'MYR',再用SUM统计符合条件的记录数。这样既符合你的需求,逻辑也更清晰:

SUM(CASE WHEN NVL(D.CURRENCY, 'MYR') = 'MYR' THEN 1 ELSE 0 END) AS Cur

补充说明:

  • 这里NVL函数的第二个参数是**'MYR',也就是把所有CURRENCY为NULL的记录替换成'MYR'**
  • 替换后,只要值是'MYR'(不管原本就是MYR还是替换后的),我们就计数1,否则0
  • 如果你的数据库支持布尔值的隐式转换(比如Oracle),还可以简化成更短的写法:
SUM(CASE WHEN NVL(D.CURRENCY, 'MYR') = 'MYR' THEN 1 END) AS Cur

(因为CASE WHEN不满足条件时会返回NULL,SUM函数会自动忽略NULL值,效果和上面的代码一致)

逻辑验证示例

假设你的CURRENCY列有这些数据:

'MYR', NULL, 'USD', 'MYR', 'SGD', NULL

经过NVL(D.CURRENCY, **'MYR'**)处理后,数据会变成:

'MYR', 'MYR', 'USD', 'MYR', 'SGD', 'MYR'

统计出来的结果就是4,完全符合你想要统计MYR和空值的需求。

内容的提问来源于stack exchange,提问作者zakira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:53:07