zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    IDA .edata .rdata .idata .text segments
    How to detect the types of executable files
    Dynamic-Link Library Redirection
    J-Link Version
    PE文件结构部分解析以及输入的定位
    Delphi : Analyze PE file headers?
    How to tell if a file is an EXE or a DLL?
    PE Header and Export Table for Delphi
    NXP ARM Vector Table CheckSum
    反接保护电路 Reverse Voltage Protection
  • 原文地址:https://www.cnblogs.com/GeekHying/p/8246008.html
Copyright © 2011-2022 走看看