• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解mysql中if函数的正确使用姿势

    为了今天要写的内容,运行了将近7个小时的程序,在数据库中存储了1千万条数据。——

    今天要说的是mysql数据库的IF()函数的一个实例。

    具体场景如下,

    先看看表结构:

    CREATE TABLE `message` (
     `id` varchar(30) NOT NULL,
     `title` varchar(30) DEFAULT NULL,
     `content` text,
     `send_time` datetime DEFAULT NULL,
     `type` int(1) DEFAULT NULL COMMENT '1:系统通知,2:投诉建议',
     `status` int(1) DEFAULT NULL COMMENT '0:待发送,1:成功,2:失败',
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

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

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

    SELECT
     COUNT(1)  total,
     m.type,
     (SELECT
       COUNT(1)
      FROM message ms
      WHERE ms.status = 1
        AND m.type = ms.type)  successtotal,
     (SELECT
       COUNT(1)
      FROM message mf
      WHERE mf.status = 1
        AND m.type = mf.type)  failtotal
    FROM message m
    GROUP BY m.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语句如下:

    SELECT
     COUNT(1)  total,
     m.type,
     SUM(IF(m.status = 1,1,0))  successtotal,
     SUM(IF(m.status != 1,1,0))  failtotal
    FROM message m
    GROUP BY m.type;
    

    看着是不是比上面的子查询简洁多了,我们来看看运行时间,只有1分30秒。是不是快多了。

    那么,今天你学会了吗?

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • mysql中null(IFNULL,COALESCE和NULLIF)相关知识点总结
    • mysql中coalesce()的使用技巧小结
    • mysql中替代null的IFNULL()与COALESCE()函数详解
    • SQL Server COALESCE函数详解及实例
    • 浅析SQL Server的分页方式 ISNULL与COALESCE性能比较
    • MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)
    • MySQL通过自定义函数实现递归查询父级ID或者子级ID
    • MySql COALESCE函数使用方法代码案例
    上一篇:关于MySQL死锁问题的深入分析
    下一篇:MySQL 8.0.18 Hash Join不支持left/right join左右连接问题
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解mysql中if函数的正确使用姿势 详解,mysql,中,函数,的,正确,