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

Oracle SQL查询:仅返回SUM(Salary)超100万欧元的结果,否则返回NULL

Oracle SQL 按条件返回薪资总和或NULL

原查询用于统计Office为'A'且在MoreData表中标记为Active='Yes'的用户薪资总和:

Select SUM(Salary) from Users d, MoreData m where
d.Office = 'A' and
m.Active = 'Yes' and
d.id_user = m.id_of_user

需求调整:仅当总和超过1,000,000欧元时返回结果,否则返回NULL。

可行方案

方案一:CASE WHEN 直观写法

把聚合函数放在CASE内部做判断,语法合规且逻辑清晰:

SELECT 
    CASE 
        WHEN SUM(Salary) > 1000000 THEN SUM(Salary) 
        ELSE NULL 
    END AS total_salary
FROM Users d
JOIN MoreData m ON d.id_user = m.id_of_user
WHERE d.Office = 'A' AND m.Active = 'Yes'

方案二:NULLIF + GREATEST 简化写法

用两个函数组合实现,代码更简洁:

SELECT NULLIF(GREATEST(SUM(Salary), 1000001), 1000001) AS total_salary
FROM Users d
JOIN MoreData m ON d.id_user = m.id_of_user
WHERE d.Office = 'A' AND m.Active = 'Yes'

错误原因说明

之前触发ORA-00900错误,多半是CASE WHEN的语法位置搞错了——比如把聚合函数放在CASE外面,或者语法格式不对。上面两种写法都将聚合后的结果作为判断依据,完全符合Oracle的语法规则。另外建议用显式JOIN替代老式的逗号分隔表写法,代码可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:15:41