想知道,MySQL将如何处理这个查询,如果sum(credits)!= NULL或者MySQL是否为这些查询进行了优化,sum()会计算两次。MySQL - 如果条件优化
select if(sum(credits)=NULL, 0, sum(credits)) from ......
感谢
想知道,MySQL将如何处理这个查询,如果sum(credits)!= NULL或者MySQL是否为这些查询进行了优化,sum()会计算两次。MySQL - 如果条件优化
select if(sum(credits)=NULL, 0, sum(credits)) from ......
感谢
如果将无法正常工作。第一个条件总是错误的。与NULL
进行比较的正确方法是IS NULL
,而不是=
。
只需使用该构建体:
select coalesce(sum(credits), 0)
谢谢,我对语法进行了更正,但如果使用IS NULL会发生什么情况,它会计算两次吗? – yumoji
@Yusuf。 。 。这取决于数据库,但可能是MySQL的。然而,sum()的计算与通常的聚合工作相比是微不足道的(这一点不再重复)。所以额外的工作应该是微不足道的(对于'count(distinct)'''这样的“更难”功能可能更重要)。 –
使用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) .....
这是我们不应该担心的事情。使用SQL,我们告诉DBMS要做什么,而不是如何去做。
DBMS很可能只会计算sum(credits)
一次。如果不是,那看起来很愚蠢。但是,这不是由SQL标准决定的,因此DBMS程序员可以自由选择如何对其进行编码。他们可能写入DBMS,以便sum(credits)
计算两次。我们无法知道他们是否做到了,但如前所述,这不太可能,我们也不应该担心。
'sum'只发生一次而不是两次 – ughai