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
相关产品推荐
相关产品推荐

