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
原文地址:https://www.cnblogs.com/GeekHying/p/8246008.html