• mysql学习记录,CASE WHEN THEN ELSE END用法


    记mysql,case when then else end用法

    用法1:搜索函数

    SELECT
      r.order_no,
      r.golds,
      r.pay_tool,
      CASE WHEN r.pay_tool = 2 THEN IFNULL( (SELECT w.cash_fee FROM ww_weixin_notify w WHERE w.out_trade_no = r.order_no GROUP BY w.out_trade_no) / 100 , 0) 
      ELSE IFNULL( (SELECT w.receipt_amount FROM ww_alipay_notify w WHERE w.out_trade_no = r.order_no GROUP BY w.out_trade_no), 0) 
      END AS price,
      r.create_time,
      r.action
    FROM
      ww_pay_record r
    WHERE
      r.user_id = 119

    CASE 如果

    WHEN 后面跟条件

    THEN 操作结果

    后面可以跟多个WHEN THEN

    ELSE 其余情况

    END 结束

    用法2:进行自定义排序

    SELECT a.id, a.type, a.name, a.golds, a.init_golds
    FROM ww_device a
    WHERE a.state = 1
        AND NOW() < a.tx_time
        AND model = '122'
    ORDER BY a.type DESC, CASE 
        WHEN a.golds <> a.init_golds THEN 0
        ELSE 1
    END

    先进行type倒序排序,然后将golds不等于init_golds的数据进行排序。


    用法3:已知数据按照另外一种方式进行分组、分析

    创建以下表数据:

    要求:统计亚洲和北美洲的人口数量

    SELECT SUM(population) AS population
        , CASE country
            WHEN '中国' THEN '亚洲'
            WHEN '印度' THEN '亚洲'
            WHEN '日本' THEN '亚洲'
            WHEN '美国' THEN '北美洲'
            WHEN '加拿大' THEN '北美洲'
            WHEN '墨西哥' THEN '北美洲'
            ELSE '其他'
        END AS continent
    FROM table_a
    GROUP BY continent

    得到如下结果:


    用法4:用一个SQL语句完成不同条件的分组

    创建以下表数据:

    要求:按照国家和性别进行分组

    SELECT country as '国家', SUM(CASE 
            WHEN sex = 1 THEN population
            ELSE 0
        END) AS '', SUM(CASE 
            WHEN sex = 2 THEN population
            ELSE 0
        END) AS ''
    FROM table_b
    GROUP BY country;

    得到如下结果:


    用法5:根据条件有选择的UPDATE

    有如下条件:

    1、工资5000以上的职员,工资减少10%

    2、工资在2000到4600之间的职员,工资增加15%

    如果执行两次UPDATE语句,如下所示:

    #语句1(满足条件1
    UPDATE Personnel
    SET salary = salary * 0.9
    WHERE salary >= 5000;
    #语句2(满足条件2
    UPDATE Personnel
    SET salary = salary * 1.15
    WHERE salary >= 2000 AND salary < 4600;

    假设一人工资为5000元,那么执行语句1,工资变为4500元,接下来运行第二个SQL语句时,因为这个人在执行完第一个SQL语句后工资在2000到4600之间,工资会增加15%,工资变为5175元,最终这个人的工资没有减少,反而增加了;如果我们希望通过一个SQL语句实现这个业务的话,就要使用到case函数

    UPDATE Personnel
    SET salary = CASE 
        WHEN salary >= 5000 THEN salary * 0.9
        WHEN salary >= 2000
        AND salary < 4600 THEN salary * 1.15
        ELSE salary
    END;

    以上用法3、4、5参考:https://www.cnblogs.com/prefect/p/5746624.html

    The way of code
  • 相关阅读:
    sql2slack alash3al 开源的又个轻量级工具
    pgspider fetchq 扩展docker镜像
    godns 集成coredns 的demo
    godns 简单dnsmasq 的dns 替换方案
    aviary.sh 一个基于bash的分布式配置管理工具
    使用coredns 的template plugin实现一个xip 服务
    nginx 代理 coredns dns 服务
    基于nginx proxy dns server
    几个不错的geodns server
    spring boot rest api 最好添加servlet.context-path
  • 原文地址:https://www.cnblogs.com/GeekHying/p/8246008.html
Copyright © 2020-2023  润新知