今天就跟大家聊聊有关怎么在mysql中使用if函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

具体场景如下,

先看看表结构:

CREATETABLE`message`(`id`varchar(30)NOTNULL,`title`varchar(30)DEFAULTNULL,`content`text,`send_time`datetimeDEFAULTNULL,`type`int(1)DEFAULTNULLCOMMENT'1:系统通知,2:投诉建议',`status`int(1)DEFAULTNULLCOMMENT'0:待发送,1:成功,2:失败',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;

具体要求是:分别统计系统通知和投诉建议两种消息的总条数、成功条数和失败条数。

遇到这样的问题,我们一般的思路就是用type分组,分别查询系统通知和投诉建议的总条数,然后用两个子查询来统计成功条数和失败条数。sql如下:

SELECTCOUNT(1)total,m.type,(SELECTCOUNT(1)FROMmessagemsWHEREms.status=1ANDm.type=ms.type)successtotal,(SELECTCOUNT(1)FROMmessagemfWHEREmf.status=1ANDm.type=mf.type)failtotalFROMmessagemGROUPBYm.type

我们看看运行时间,统计1千万条数据大概需要6分18秒。

那么有没有更简单,更快的统计方式呢,当然是有的,就是我们今天主要讲的if()函数。

基本语法

IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。就是一个简单的三目表达式。

如何做

说说思路,假如我们统计成功条数,我们可以这样写if(status=1,1,0),这样如果status==1,则返回1,否则返回0。然后我们通过SUM()函数将成功条数相加即可。

实现方式

sql语句如下:

SELECTCOUNT(1)total,m.type,SUM(IF(m.status=1,1,0))successtotal,SUM(IF(m.status!=1,1,0))failtotalFROMmessagemGROUPBYm.type;

看完上述内容,你们对怎么在mysql中使用if函数有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。