MySql使用if语句例子

工作中同事提的一个问题:
有一张用户表,表里面三个字段,分别是用户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
FROM
    test
where
    money >= 0
    and money < 1000
) f1 

UNION ALL 

SELECT '=1000',count(1) from (
SELECT
id
FROM
    test where money=1000
) f2

UNION ALL 

SELECT '1000<money<5000',count(1) from (
SELECT
id
FROM
    test
where money>1000 and money < 5000
) f3
UNION ALL 
SELECT '=5000',count(1) from (
SELECT
id
FROM
    test
where money = 5000
) f4
UNION ALL 
SELECT '>5000',count(1) from (
SELECT
id
FROM
    test
where
    money > 5000
) f5

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

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

SELECT
    f,
    COUNT(1)
FROM
    (
        SELECT

        IF (
            money < 1000,
            1,

        IF (
            money = 1000,
            2,

        IF (
            money < 5000,
            3,

        IF (money = 5000, 4, 5)
        )
        )
        ) AS f
        FROM
            test
    ) t
GROUP BY
    f

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

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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值