mysql中if函数的正确使用姿势,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秒。是不是快多了。

那么,今天你学会了吗?

如果文章对您有帮助,请记得点赞关注哟~

欢迎大家关注我的公众号,每日技术推送文章供大家学习参考。

http://www.dengb.com/Javabc/1378201.htmlwww.dengb.comtruehttp://www.dengb.com/Javabc/1378201.htmlTechArticlemysql中if函数的正确使用姿势,mysql的if函数 ——为了今天要写的内容,运行了将近7个小时的程序,在数据库中存储了1千万条数据。—— 今...

java实现mysql if函数,mysql中if函数的正确使用姿势,mysql的if函数相关推荐

  1. mysql在注册表中删除了怎么办_如何清除mysql注册表

    具体方法: 1.按[win+r]打开运行,输入regedit,点击[确定],打开注册表编辑器: 2.找到以下路径: 计算机 \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet0 ...

  2. oracle 函数_oracle中row_number、rank、dense_rank() 的区别(over函数)

    row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号. ...

  3. php和mysql时间类型,MySQL_Mysql中的Datetime和Timestamp比较,mysql中用于表示时间的三种类 - phpStudy...

    Mysql中的Datetime和Timestamp比较 mysql中用于表示时间的三种类型date, datetime, timestamp (如果算上int的话,四种) 比较容易混淆,下面就比较一下 ...

  4. python怎么把程序封装成函数_PYTHON中如何把固定格式代码,封装成一个函数?

    图片压缩的太厉害了,看不清楚,代码如下: with open('movies.csv', 'r') as f: reader = csv.reader(f) texts = list(reader) ...

  5. 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...

    语言义中语句 数定省略保险般来能一几项的职以下说有. 来源统计济数据的主要调查得社会经是获,需要包括如下容(的内应该. 具体是指,结果积反映房空置面商品,而尚未出屋期末报告工可供销的房出租出租已竣是指 ...

  6. java mail 附件 dat,邮件附件winmail.dat文件的正确打开姿势

    Outlook是一款办公场景中常被使用的邮箱工具.许多用户在用Outlook管理邮箱收发邮件的过程中,会遇到邮件中的附件被打包成winmail.dat格式文件无法打开的情况. 今天将分享邮件附件win ...

  7. Mysql之向表中插入数据

    Mysql之向表中插入数据 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...f ...

  8. mysql如何替换字符串中换行符及回车符

    mysql如何替换字符串中换行符及回车符 mysql如何替换字符串中换行符及回车符 替换字符串中回车符 update mscto.table set bodyhtml= replace(bodyhtm ...

  9. mysql ssl编译_centos编译安装配置支持ssl加密的mysql replication

    参考文章:http://www.howtoforge.com/how-to-set-up-mysql-database-replication-with-ssl-encryption-on-cento ...

  10. python函数定义中参数列表里的参数是_python函数参数中的/和*是什么意思?

    在python3.8之后函数参数中允许出现/和*号,/用来指明某些函数形参必须使用位置参数而非关键字参数的形式,*出现在函数参数中第一种含义可以表示为可变参数,一般写作*args:对于单独出现在参数中 ...

最新文章

  1. Mapreduce 任务提交源码分析1
  2. JAVA SE学习day_03:包装类、文件操作——file
  3. 如何借助“AI+边缘计算”助推能源产业智能化转型?这场直播给你答案 | 量子位·视点...
  4. hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (背包问题)
  5. Maven构建java项目
  6. python函数(一)
  7. canal mysql从库_canal中间件|数据增量同步解决方案
  8. python绘制星空图_【Python】基于某些列删除数据框中的重复值
  9. 2010-3-13 社区精英面对面 - 北京 Dev 组 2010 领袖 活动
  10. 【数据结构----笔记2】查找算法之【哈希查找或散列查找】
  11. 台式电脑屏幕怎么调亮度_电脑屏幕亮度到底怎么调才最好?
  12. 实验教学管理系统 c语言程序代写源码下载
  13. Excel使用VBA小程序的方法
  14. 网络检测之(MTR WinMTR )网络链路追踪公路
  15. torchdiffeq中odeint函数的输入输出参数分析
  16. 步进电机 高速光耦_高速光耦有哪些_高速光耦如何选型 - 全文
  17. 【Python实现人脸比对】——打造智能人脸识别系统
  18. 清凉一夏 5 月学习挑战,得限量勋章冲榜赢现金
  19. Python从入门到精通 | Python作用与定义 | 三种注释的语法(三)
  20. java二叉树计算深度

热门文章

  1. javascript客户端验证函数大全
  2. php如何隐藏入口文件,php怎么隐藏入口文件
  3. 小知识--oppo R9sk手机刷机
  4. 公众号获取用户手机号_微信公众号如何选取种子用户
  5. windows 编写的硬件驱动_黑科技or大势所趋?谈谈手机GPU驱动升级那点事
  6. php js树状菜单,php+mysql+js实现树形菜单代码
  7. 计算机二级怎么让试题变简单,如何有效利用历年真题备考全国计算机等级考试?...
  8. fread函数和fwrite函数
  9. NYOJ770 仿射密码
  10. 法律人学python_你要埋头苦学三个月,然后悄悄惊艳所有人。python速成大法满足你所有的要求!...