2016-06-17 62 views
0

想知道,MySQL将如何处理这个查询,如果sum(credits)!= NULL或者MySQL是否为这些查询进行了优化,sum()会计算两次。MySQL - 如果条件优化

select if(sum(credits)=NULL, 0, sum(credits)) from ...... 

感谢

+0

'sum'只发生一次而不是两次 – ughai

回答

0

如果将无法正常工作。第一个条件总是错误的。与NULL进行比较的正确方法是IS NULL,而不是=

只需使用该构建体:

select coalesce(sum(credits), 0) 
+0

谢谢,我对语法进行了更正,但如果使用IS NULL会发生什么情况,它会计算两次吗? – yumoji

+0

@Yusuf。 。 。这取决于数据库,但可能是MySQL的。然而,sum()的计算与通常的聚合工作相比是微不足道的(这一点不再重复)。所以额外的工作应该是微不足道的(对于'count(distinct)'''这样的“更难”功能可能更重要)。 –

0

使用IF

SELECT IF(sum(credits) IS NULL, 0 ,sum(credits)) ..... 

IF(表达式1,表达式2,表达式3)

如果expr1 TRUE(表达式1 <> 0且expr1的<> NULL),那么IF()返回expr2;否则它返回expr3。 IF()返回一个数字或字符串值,这取决于在其中使用它

使用上下文IFNULL

SELECT IFNULL(sum(credits), 0) ..... 

使用COALESCE

SELECT COALESCE(sum(credits), 0) ..... 

参见:MySQL Control Flow Functions

0

这是我们不应该担心的事情。使用SQL,我们告诉DBMS要做什么,而不是如何去做。

DBMS很可能只会计算sum(credits)一次。如果不是,那看起来很愚蠢。但是,这不是由SQL标准决定的,因此DBMS程序员可以自由选择如何对其进行编码。他们可能写入DBMS,以便sum(credits)计算两次。我们无法知道他们是否做到了,但如前所述,这不太可能,我们也不应该担心。