总和然后除以问题

时间:2019-09-24 14:10:57

标签: sql sql-server

目前,我正在尝试将两列求和,然后除以另一个示例;

'''SUM(M.Bonus) + ISNULL(SUM(Q.Bonus),0) / SUM(Salary.M)'''

Q.Bonus包含null个值。如果删除ISNULL,它将为我提供正确的答案,但由于空值而无法计算出一些答案。当我使用ISNULL进行操作时,它只是给我求和结果。

4 个答案:

答案 0 :(得分:4)

从您的一个简短问题开始,我猜您有一个基本的BODMAS数学问题

SUM(M.Bonus) + ISNULL(SUM(Q.Bonus),0) / SUM(Salary.M)

应该是

(SUM(M.Bonus) + ISNULL(SUM(Q.Bonus),0)) / SUM(Salary.M)

请注意多余的括号!

没有更多上下文和示例代码,很难知道您的真正要求。有关this page的更多信息,请参见asking a good question

答案 1 :(得分:1)

您需要更正ISNULL()函数语法。
您需要注意以下devide by zero错误。

此查询为您提供答案。

SUM(ISNULL(M.Bonus,0)) + SUM(ISNULL(Q.Bonus,0)) / ISNULL(SUM(ISNULL(M.Salary,0)),1)

注意:我认为您可能写错了工资别名。所以,我已更正。

答案 2 :(得分:1)

我认为您想要遵循这些原则。您只需要一个聚合。还要加上括号以确保计算正确执行。

SUM((M.Bonus + ISNULL(Q.Bonus, 0)) / M.Salary) 

答案 3 :(得分:1)

您需要其他括号。但我建议使用NULLIF()来避免被零除错误:

(SUM(M.Bonus) + COALESCE(SUM(Q.Bonus), 0)) / NULLIF(SUM(Salary.M), 0)