工作中同事提的一个问题:
有一张用户表,表里面三个字段,分别是用户ID,用户姓名,和用户薪水,表里面有100万条数据,如何用一句SQL查询出
薪水小于1000,薪水=1000,1000<薪水<5000,薪水=5000,薪水>5000的人。写出的SQL效率越高越好。

测试:
CREATE TABLE test (
id int(11) NOT NULL AUTO_INCREMENT,
money int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

插入100W条数据;进行写sql。

最开始打算使用最普通的方式写:

SELECT '<1000',count(1) from (
SELECT
id
FROMtest
wheremoney >= 0and money < 1000
) f1 UNION ALL SELECT '=1000',count(1) from (
SELECT
id
FROMtest where money=1000
) f2UNION ALL SELECT '1000<money<5000',count(1) from (
SELECT
id
FROMtest
where money>1000 and money < 5000
) f3
UNION ALL
SELECT '=5000',count(1) from (
SELECT
id
FROMtest
where money = 5000
) f4
UNION ALL
SELECT '>5000',count(1) from (
SELECT
id
FROMtest
wheremoney > 5000
) f5

刚开始想到的方式。。。用了1.103s ,肯定是效率不达标的。

后面公司开发老大发出的sql:

SELECTf,COUNT(1)
FROM(SELECTIF (money < 1000,1,IF (money = 1000,2,IF (money < 5000,3,IF (money = 5000, 4, 5)))) AS fFROMtest) t
GROUP BYf


只用了0.413s,很厉害;
可以从sql中看出使用了if的语句,很大程度提高了效率。
sql的效果是对每一条都执行判断然后附上对应条件的值。
这样写应该好看懂一点点

SELECT f,COUNT(1)
from (SELECTIF (money < 1000, 1,IF(money = 1000,2,IF(money < 5000,3,IF(money = 5000,4,5)))) fFROMtest
) r GROUP BY f

sql中的if语句是一层一层嵌套执行着的。

MySql使用if语句例子相关推荐

  1. Mysql数据库操作语句总结(三)

    最近一段时间重新学习一下mysql命令行的用法, 这里简单记录一下 参考文章: https://www.cnblogs.com/bluealine/p/7832219.html 个人使用的是mysql ...

  2. mysql ddl查询语句_SQL基础-----DDL

    编辑推荐: 本文来自于cnblogs,本文主要通过一些例子来介绍MySQL常用DDL语句的使用方法,希望对您能有所帮助. 1 (My)SQL入门 这里用了(My)SQL这样的标题,目的是介绍标准SQL ...

  3. 关于mysql中Join语句的几个问题

    本文来说下关于mysql中Join语句的几个问题,JOIN语句在平时的开发中还是使用的非常多的 文章目录 概述 基本介绍 举个例子 一个注意点 Join原理 Simple Nested-Loop In ...

  4. php面试专题---MySQL常用SQL语句优化

    php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...

  5. mysql监控---慢语句查询

      慢语句查询.  1,开启慢sql日志查询功能.  2,用show full processlist :查询执行的sql语句,然后看哪些语句有问题.  3,将有问题的语句拿出来,前面放上explai ...

  6. MySQL 递归 sql语句 WITH表达式实现

    MySQL 递归 sql语句 WITH AS 实现 前言: 这里一般来说需要编一个故事但是我懒 mysql递归CTE: 8.0版本以上才有WITH AS,8.0以下版本的话请绕行----->不是 ...

  7. mysql的repeat语句_mysql实例 repeat语句的用法

    本节分享一段mysql实例代码,学习mysql中repeat语句的用法. 代码如下: mysql> DELIMITER // mysql> CREATE FUNCTION myFuncti ...

  8. 检测mysql中sql语句的效率

    1.通过查询日志 启动Mysql时加参数--log-slow-queries来记录执行时间超过long_query_time秒的sql MySQL 自带 slow log 的分析工具 mysqldum ...

  9. Mysql 常用统计语句

    Mysql 常用统计语句 SQL分类 首先,简要介绍基础语句: 1.创建数据库  CREATE DATABASE test; 2.删除数据库  Drop database test; 3.备份sql ...

最新文章

  1. 关于XDC约束文件,你需要知道的几点
  2. String 中的秘密
  3. Android构建流程——篇六
  4. RxSwift之UI控件UISwitch与UISegmentedControl扩展的使用
  5. python中变量类型在程序中可以改变_详细解析Python当中的数据类型和变量
  6. Net框架下-ORM框架LLBLGen的简介(转载)
  7. 凸优化第八章几何问题 8.5 中心
  8. 单片机应用系统设计技术——扩展行列式键盘
  9. 我的Delphi开发经验谈(本人修改版) 收藏
  10. S32K的flash组件使用(操作FLASH)
  11. PHP将uncode转utf8,一行代码解决问题
  12. python计算各类型电影的评分,Moviedata-10M电影数据集统计分析之源码分享(Python)...
  13. LeetCode - Pascal's Trangle
  14. python解包wxapkg_小程序反编译之获取wxapkg包
  15. 论文笔记:SemStyle: Learning to Generate Stylised Image Captions using Unaligned Text
  16. java测试输入星座匹配_java十二星座 (快来测试你是什么星座吧)
  17. 解决 Starting MySQL ERROR The server quit without updating PID file
  18. 【重识云原生】第六章容器6.1.8节——Docker核心技术UnionFS
  19. python 评论分析_基于Python-Snownlp的新闻评论数据分析
  20. docker部署smokeping监控网络掉包

热门文章

  1. Airtest  入门
  2. NLP经典论文:Sequence to Sequence、Encoder-Decoder 、GRU 笔记
  3. python入门---日常经验分享
  4. ArkUI开发趣味体验,快来抽取限量HarmonyOS专属头像!
  5. java 静态抽象类_java--抽象类实例(包含静态内部抽象类)
  6. c++ opencv (学习笔记)inRange函数
  7. Unity 3D模型展示之控制标注
  8. 服务器属于三大系统,服务器三大操作系统
  9. 如何统计一列中姓名重复出现的次数,并且只标注在第一次出现姓名的位子
  10. stm32f429之多通道ADC通过DMA数据采集