记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

mysql学习记录,CASE WHEN THEN ELSE END用法的更多相关文章

  1. (一)《SQL进阶教程》学习记录--CASE

    背景:最近用到统计之类的复杂Sql比较多,有种"提笔忘字"的感觉,看书练习,举一反三,巩固加强. (一) <SQL进阶教程>学习记录--CASE (二) <SQL ...

  2. ElasticSearch 学习记录之ES短语匹配基本用法

    短语匹配 短语匹配故名思意就是对分词后的短语就是匹配,而不是仅仅对单独的单词进行匹配 下面就是根据下面的脚本例子来看整个短语匹配的有哪些作用和优点 GET /my_index/my_type/_sea ...

  3. 我的MySQL学习记录 完结篇DAY05~

    课程已全部学完,Redis\mongoDB 的学习也会提上日程啦~剩下的最大的最大的问题在于练习,大量的练习,后期会发我的学习记录. 小记:也不知道是不是加强针的缘故,老是拉肚子,记录彻底感冒的一天, ...

  4. Mysql 学习记录

    ( xampp 的mysql 与 直接用 dnf 安装的 mysql 有冲突! ) 1. 数据库基本知识: 一张表的行 又称为 记录 一张表的列 又称为 字段 表结构:所有字段,规定了你的每一条记录所 ...

  5. mysql学习记录

    干净卸载mysql:https://blog.csdn.net/cxy_summer/article/details/70142322mysql 解压缩版安装说明:https://jingyan.ba ...

  6. MySQL学习记录一

    1.MySQL join操作 left join以左表为基础,其记录会全部表示出来,而右表只显示满足搜索条件的记录.right join以右表为基础,其记录会全部显示出来,而左表只显示满足搜索条件的记 ...

  7. MySQL学习记录(导入Excel表到数据库,并筛选条件输出)

    附上:重置mysql账号密码方法 ubuntu系统下mysql重置密码和修改密码操作 - skh2015java的博客 - CSDN博客(改完重启,登录mysql要root/sudo权限) Cento ...

  8. mysql学习记录(一)

    #打开MySQL服务 sudo service mysql start #Ubuntu Linux 安装配置MySQL #安装MySQL服务器,核心程序 sudo apt-get install my ...

  9. MySQL学习记录--操作时间数据

    1.返回日期的时间函数 date_add() : 可以为指定日期增加/减少任意一段时间间隔.下面举例将当前日期增加一个月和减少一个月 mysql month) as add_one_month; +- ...

随机推荐

  1. VS2013 C++ 动态链接库的生成

    原文:http://www.cnblogs.com/djiankuo/p/5092025.html 这个东西搞了好几天,现在终于没有问题了,其实现在想来还是微软做的东西好用啊,在这里点个赞!!! LL ...

  2. Android ListView复制、删除的实现

    适配器MyAdapter: package com.zihao.adapter; import java.util.List; import com.zihao.popdemo.R; import c ...

  3. 【Python】内置方法pop

    此时 a,b 指向的地址所存的内容均被更改

  4. 第三次Scrum

    1.小组成员 周 斌舒 溢许嘉荣唐 浩黄欣欣廖帅元刘洋江薛思汝 2.小组第三次冲刺完成情况 github仓库小组的第三次任务是完成体系结构环境图和系统原型图.在体系结构设计中,分为上级系统----把目 ...

  5. klee错误汇报二:KLEE的optimize选项的一个困惑

    问题已经提交github:https://github.com/klee/klee/issues/650 在一个对命令行参数进行建模的符号执行过程中,添加optimize选项与不添加optimize选 ...

  6. 在Linux中安装redmine

    Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统. 如下即为安装步骤: (1)配置ruby环境,可用rvm进行安装匹配,参考http://ruby- ...

  7. 动态给table添加动态航

    <html> <head> <title>usually function</title> <meta http-equiv="Cont ...

  8. DFS BFS代码

    #define maxnum 30 #include<bits_stdc++.h> int visited[maxnum]={0}; using namespace std; typede ...

  9. CountDownLatch的简单使用

    from https://www.jianshu.com/p/cef6243cdfd9 1.CountDownLatch是什么? CountDownLatch是一个同步工具类,它允许一个或多个线程一直 ...

  10. CSV 文件读写

    转自:http://www.cnblogs.com/Clin/archive/2013/03/14/2959022.html public class CSVFileHelper { /// < ...