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 = ''
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用法的更多相关文章
- (一)《SQL进阶教程》学习记录--CASE
背景:最近用到统计之类的复杂Sql比较多,有种"提笔忘字"的感觉,看书练习,举一反三,巩固加强. (一) <SQL进阶教程>学习记录--CASE (二) <SQL ...
- ElasticSearch 学习记录之ES短语匹配基本用法
短语匹配 短语匹配故名思意就是对分词后的短语就是匹配,而不是仅仅对单独的单词进行匹配 下面就是根据下面的脚本例子来看整个短语匹配的有哪些作用和优点 GET /my_index/my_type/_sea ...
- 我的MySQL学习记录 完结篇DAY05~
课程已全部学完,Redis\mongoDB 的学习也会提上日程啦~剩下的最大的最大的问题在于练习,大量的练习,后期会发我的学习记录. 小记:也不知道是不是加强针的缘故,老是拉肚子,记录彻底感冒的一天, ...
- Mysql 学习记录
( xampp 的mysql 与 直接用 dnf 安装的 mysql 有冲突! ) 1. 数据库基本知识: 一张表的行 又称为 记录 一张表的列 又称为 字段 表结构:所有字段,规定了你的每一条记录所 ...
- mysql学习记录
干净卸载mysql:https://blog.csdn.net/cxy_summer/article/details/70142322mysql 解压缩版安装说明:https://jingyan.ba ...
- MySQL学习记录一
1.MySQL join操作 left join以左表为基础,其记录会全部表示出来,而右表只显示满足搜索条件的记录.right join以右表为基础,其记录会全部显示出来,而左表只显示满足搜索条件的记 ...
- MySQL学习记录(导入Excel表到数据库,并筛选条件输出)
附上:重置mysql账号密码方法 ubuntu系统下mysql重置密码和修改密码操作 - skh2015java的博客 - CSDN博客(改完重启,登录mysql要root/sudo权限) Cento ...
- mysql学习记录(一)
#打开MySQL服务 sudo service mysql start #Ubuntu Linux 安装配置MySQL #安装MySQL服务器,核心程序 sudo apt-get install my ...
- MySQL学习记录--操作时间数据
1.返回日期的时间函数 date_add() : 可以为指定日期增加/减少任意一段时间间隔.下面举例将当前日期增加一个月和减少一个月 mysql month) as add_one_month; +- ...
随机推荐
- Perl学习笔记(3)----遍历哈希表的一个容易疏忽的地方
今天做 Google的 Code Jam 上的一道题目:https://code.google.com/codejam/contest/351101/dashboard#s=p2,用Perl语言解答的 ...
- 23_ConcurrentLinkedQueue
[简述] ConcurrentLinkedQueue是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueu性能好于BlockingQu ...
- TE7下的创建组件AxHost失败
问题比较诡异.时好时坏的.网上的办法试过了,没用. 最后的解决办法是,把项目属性切换到Any CPU,然后勾选 32位优先,切换到界面设计状态,拖放控件,OK:运行,会出现红色提示:再次切换到项目属性 ...
- HTTP协议(持续更新)
http请求由三部分组成,分别是:请求行.消息报头.请求正文 HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接 ...
- Javascript之深入理解闭包
闭包算是js里面比较不容易理解的点,尤其是对于没有编程基础的人来说. 其实闭包要注意的就那么几条,如果你都明白了那么征服它并不是什么难事儿.下面就让我们来谈一谈闭包的一些基本原理. 闭包的概念 一个闭 ...
- git下的团队合作模型及git基础知识汇集
https://www.atlassian.com/git/tutorials/syncing/git-fetch Syncing svn使用单个中央库来作为开发者之间沟通的桥梁,而协同合作是通过在开 ...
- centos 克隆系统放到别的机器上后出现网卡启动不了的情况
1. Remove Network Manager from startup Services. #chkconfig NetworkManager off 2. Add Default Net ...
- GPDB 5.x PSQL Quick Reference
General \copyright show PostgreSQL usage and distribution terms \g [FILE] or ; execute query (and se ...
- vim的visual模式
在可视化模式下,可以对一个文本块的整体进行操作.例如,首先高亮选中一部分文本,然后用d命令删除这个文本块.可视化模式的好处在于,你可以在做改动之前,就看到操作将影响的文本.可视化模式可以分为以下三种: ...
- 你所不知道的C和C++运行库 标签: vc 2017-05-26 10:33 41人阅读 评论(0) 收藏
在使用vs2013调用vc2005编译出的dll时出现错误,遂将源程序用vs2013编译出dll,再用vs2013调用错误消失,不解.寻找原因时有人说"VC库版本不一样",故查找C ...