java实现mysql if函数,mysql中if函数的正确使用姿势,mysql的if函数
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函数相关推荐
- mysql在注册表中删除了怎么办_如何清除mysql注册表
具体方法: 1.按[win+r]打开运行,输入regedit,点击[确定],打开注册表编辑器: 2.找到以下路径: 计算机 \HKEY_LOCAL_MACHINE\SYSTEM\ControlSet0 ...
- oracle 函数_oracle中row_number、rank、dense_rank() 的区别(over函数)
row_number的用途非常广泛,排序最好用它,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号. ...
- php和mysql时间类型,MySQL_Mysql中的Datetime和Timestamp比较,mysql中用于表示时间的三种类 - phpStudy...
Mysql中的Datetime和Timestamp比较 mysql中用于表示时间的三种类型date, datetime, timestamp (如果算上int的话,四种) 比较容易混淆,下面就比较一下 ...
- python怎么把程序封装成函数_PYTHON中如何把固定格式代码,封装成一个函数?
图片压缩的太厉害了,看不清楚,代码如下: with open('movies.csv', 'r') as f: reader = csv.reader(f) texts = list(reader) ...
- 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...
语言义中语句 数定省略保险般来能一几项的职以下说有. 来源统计济数据的主要调查得社会经是获,需要包括如下容(的内应该. 具体是指,结果积反映房空置面商品,而尚未出屋期末报告工可供销的房出租出租已竣是指 ...
- java mail 附件 dat,邮件附件winmail.dat文件的正确打开姿势
Outlook是一款办公场景中常被使用的邮箱工具.许多用户在用Outlook管理邮箱收发邮件的过程中,会遇到邮件中的附件被打包成winmail.dat格式文件无法打开的情况. 今天将分享邮件附件win ...
- Mysql之向表中插入数据
Mysql之向表中插入数据 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...f ...
- mysql如何替换字符串中换行符及回车符
mysql如何替换字符串中换行符及回车符 mysql如何替换字符串中换行符及回车符 替换字符串中回车符 update mscto.table set bodyhtml= replace(bodyhtm ...
- mysql ssl编译_centos编译安装配置支持ssl加密的mysql replication
参考文章:http://www.howtoforge.com/how-to-set-up-mysql-database-replication-with-ssl-encryption-on-cento ...
- python函数定义中参数列表里的参数是_python函数参数中的/和*是什么意思?
在python3.8之后函数参数中允许出现/和*号,/用来指明某些函数形参必须使用位置参数而非关键字参数的形式,*出现在函数参数中第一种含义可以表示为可变参数,一般写作*args:对于单独出现在参数中 ...
最新文章
- Mapreduce 任务提交源码分析1
- JAVA SE学习day_03:包装类、文件操作——file
- 如何借助“AI+边缘计算”助推能源产业智能化转型?这场直播给你答案 | 量子位·视点...
- hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (背包问题)
- Maven构建java项目
- python函数(一)
- canal mysql从库_canal中间件|数据增量同步解决方案
- python绘制星空图_【Python】基于某些列删除数据框中的重复值
- 2010-3-13 社区精英面对面 - 北京 Dev 组 2010 领袖 活动
- 【数据结构----笔记2】查找算法之【哈希查找或散列查找】
- 台式电脑屏幕怎么调亮度_电脑屏幕亮度到底怎么调才最好?
- 实验教学管理系统 c语言程序代写源码下载
- Excel使用VBA小程序的方法
- 网络检测之(MTR WinMTR )网络链路追踪公路
- torchdiffeq中odeint函数的输入输出参数分析
- 步进电机 高速光耦_高速光耦有哪些_高速光耦如何选型 - 全文
- 【Python实现人脸比对】——打造智能人脸识别系统
- 清凉一夏 5 月学习挑战,得限量勋章冲榜赢现金
- Python从入门到精通 | Python作用与定义 | 三种注释的语法(三)
- java二叉树计算深度
热门文章
- javascript客户端验证函数大全
- php如何隐藏入口文件,php怎么隐藏入口文件
- 小知识--oppo R9sk手机刷机
- 公众号获取用户手机号_微信公众号如何选取种子用户
- windows 编写的硬件驱动_黑科技or大势所趋?谈谈手机GPU驱动升级那点事
- php js树状菜单,php+mysql+js实现树形菜单代码
- 计算机二级怎么让试题变简单,如何有效利用历年真题备考全国计算机等级考试?...
- fread函数和fwrite函数
- NYOJ770 仿射密码
- 法律人学python_你要埋头苦学三个月,然后悄悄惊艳所有人。python速成大法满足你所有的要求!...