case 函数语法与使用
Posted 风和日丽2010
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了case 函数语法与使用相关的知识,希望对你有一定的参考价值。
case 函数是聚合函数的一种,为统计函数。
case表达式:
CASE selector WHEN value1 THEN action1; WHEN value2 THEN action2; WHEN value3 THEN action3
一、CASE WHEN 表达式有两种形式
(1)简单Case函数
CASE sex WHEN \'1\' THEN \'男\' WHEN \'2\' THEN \'女\' ELSE \'其他\' END
(2)Case搜索函数
CASE WHEN sex = \'1\' THEN \'男\' WHEN sex = \'2\' THEN \'女\' ELSE \'其他\' END
二、CASE WHEN 应用
学生性别统计student表:
------------查询表中所有的性别
select ID, (case sex when \'1\' then \'男\' when \'2\' then \'女\' ELSE \'null\' END) AS \'性别\', province as \'省份\' from `student` ORDER BY `ID` ASC ;
查询结果如下:
-------------查询江苏省与浙江省男生与女生个数分别是多少。
第一种计算方法:以省份区分
select province AS \'江苏省\', COUNT(case sex when \'男\' THEN \'男\' ELSE null END ) AS \'男生\', COUNT(case sex when \'女\' THEN \'女\' ELSE null END ) AS \'女生\' from `student` where `province` =\'江苏\' UNION select province AS \'江苏省\', COUNT(case sex when \'男\' THEN \'男\' ELSE null END ) AS \'男生\', COUNT(case sex when \'女\' THEN \'女\' ELSE null END ) AS \'女生\' from `student` where `province` =\'浙江\'
查询结果如下:
第二种计算:以性别区分
select sex, COUNT(case province when \'江苏\' THEN \'江苏\' ELSE null END ) AS \'江苏省\', COUNT(case province when \'浙江\' THEN \'浙江\' ELSE null END ) AS \'浙江省\' from `student` group by `sex` ;
查询结果如下:
注意:
COUNT(case province
when \'江苏\' THEN \'江苏\'
ELSE null END ) AS \'江苏省\',
可以简写成:
COUNT( case province when \'江苏\' THEN \'江苏\' END ) AS \'江苏省\'
----------查询各省份的男女数量
select province , sex, COUNT(*) AS \'总数\' from `student` GROUP BY province ,sex
查询结果如下:
----------只统计了浙江省的男女数目
select sex , province, count(case province when \'江苏\' then \'江苏\' end )as \'数量\' from student group by province, sex;
查询结果如下:
当数据较多时,使用以上数据查询占用大量的资源,因此可以简单写成以下形式:
select sex as \'性别\' , count(case province when \'江苏\' then \'江苏\' end )as \'浙江省\' from student group by sex;
查询结果如下:
补充:
(1)
select (case province when \'浙江\' then \'浙江\' when \'江苏\' then \'江苏\' else province end ) as 省份 from student;
else province 默认为除浙江、江苏 外显示其他城市
(2) case when 可以跟不相等的判断。
可用于=,>=,<,<=,<>,is null,is not null 等的判断。
如:
三、CASE WHEN 与 DECODE 比较
1,DECODE Oracle 特有;
2,CASE WHEN Oracle , SQL Server, MySQL 都可用;
3,DECODE 只能用做相等判断,但是可以配合sign函数进行大于,小于,等于的判断,
CASE 可用于=,>=,<,<=,<>,is null,is not null 等的判断;
4,DECODE 使用其来比较简洁,CASE 虽然复杂但更为灵活;
以上是关于case 函数语法与使用的主要内容,如果未能解决你的问题,请参考以下文章
云计算学习路线图素材课件,msyql中CASE WHEN语法