记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 = ''
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

最新文章

  1. kettle系列-kettle管理平台部署说明
  2. vs2008所有DTE.ExecuteCommand命令
  3. [转载]Back up all of your mysql databases nightly
  4. Latent Semantic Analysis (LSA) Tutorial 潜语义分析LSA介绍 一
  5. BizTalk开发系列(二十五) SQL Adapter
  6. HAProxy安装配置详解
  7. 使用OpenCV3处理图像
  8. mvc-1mvc和类(2)
  9. JavaScript获取HTML页面源代码
  10. 获取windows身份认证网站页面内容
  11. 字典实体类:DictionaryEntry类
  12. 将List 中的ConvertAll的使用:List 中的元素转换,List模型转换, list模型转数组
  13. win10 uwp 装机必备应用 含源代码
  14. Linux显示包含全部的文件系统
  15. CSS简单使用
  16. mapreduce项目中加入combiner
  17. 第二天:python的函 数、循环和条件、类
  18. django中的ORM介绍和字段及字段参数
  19. 【转】单KEY业务,数据库水平切分架构实践
  20. Codeforces Round #429 (Div. 2) - D Leha and another game about graph

热门文章

  1. vs2010开发activex(MFC)控件/ie插件(二):js传参数
  2. Android解析ActivityManagerService(二)ActivityTask和Activity栈管理
  3. ArcGIS 10.1 如何连接数据库(转载)
  4. [PE格式分析] 4.IMAGE_FILE_HEADER
  5. SQL点点滴滴_非聚集索引设计指南-转载
  6. C++11标准之右值引用(rvalue reference)
  7. windows系统的错误码
  8. [EffectiveC++]item38:通过复合塑膜出has -a 或“根据某物实现出”
  9. 优秀 Java 程序员写代码的风格,不再留坑给别人
  10. 通讯聊天工具(pingin)