概述
第十二章 - 条件判断(case when 和 if),和视图(view)
- if 的用法
- case when 的用法
- 视图(view)的用法
if 的用法
通过使用if函数可以实现数据二分类或者多分类的功能,比如按年龄区分青年、中年、老年,或者按价格区分价值等级等等,也是很常用的函数。
函数用法:当表达式成立时,返回a,否则就返回b。
if(表达式,a,b)
举个例子:if的基本用法
按年龄段把用户分为年轻人和老年。
当年龄小于60岁的标记为年轻人,60岁(含60)以上的为老年人。
select
name,
age,
if(age < 60,'年轻人','老年人') as '年龄段'
from
test.titanic
输出结果:
if还可以嵌套使用
if ( 表达式 , if ( 表达式 , a1 , a2 ) , b )
或者
if ( 表达式 , a , if ( 表达式 , b1 , b2 ) )
举个例子:if嵌套使用
按年龄段把用户分为青年、中年、老年。
当年龄小于30岁时标记为青年,30岁到60岁以下的用户为中年,60岁以上(含60岁)的为老年
select
name,
age,
if(age < 60,if(age < 30 , '青年','中年'),'老年') as '年龄段'
from
test.titanic
输出结果:
case when 的用法
case when语句可以实现多条件判断,前面使用if虽然使用嵌套的方式也可以实现多条件判断,但是灵活性和代码可读性就低于case when语句。
case when 有两种用法,一种是固定值的用法,一种是表达式的用法,后一种用法更灵活也是最常用的一种。
用法1:不够灵活,不常用
以case开始,设置列名,当列内的值等于值1时返回a,等于值2时返回b,等于值3时返回c,…,(else表示当以上表达式都不满足时返回x。可不写,不写时返回null),最后以end结束
case 列名
when 值1 then a
when 值2 then b
when 值3 then c
....
else x end
用法2:使用灵活,常用
以case开始,满足表达式1返回a,满足表达式2返回b,满足表达式3返回c,…,(else表示当以上表达式都不满足时返回x。可不写)最后以end结束
case
when 表达式1 then a
when 表达式2 then b
when 表达式3 then c
....
else x end
下面用case when语句实现if嵌套语句的例子
举个例子
按年龄段把用户分为青年、中年、老年。
select
name,
age,
case
when age < 30 then '青年'
when age < 60 then '中年'
else '老年' end as '年龄段'
from
test.titanic
输出结果:
和if嵌套实现的查询结果是一样的。
举个例子:使用正则匹配的case when
通过表达式匹配文本中对应季节的关键字,对服装进行季节的区分。
select
title,
case
when title regexp '春' then '春季'
when title regexp '夏' then '夏季'
when title regexp '秋' then'秋装'
when title regexp '冬' then '冬季'
else '其他' end as '季节分类'
from
rectmall.product
输出结果:
视图(view)的用法
视图的作用就是把一个查询打包成一个虚拟的表。
视图的一些特点:
简化复杂的SQL:在一些复杂且有重复使用某些查询语句的情况下,可以大大简化SQL的操作。
数据保护:可一通过访问权限给予用户部分表的数据查询权限,而不是全部表的查询权限。
变更数据展示格式:可以在视图中修改数据的展示样式和格式。
语句格式:
create view 视图表名 as 查询语句
举个例子:
统计所有男性用户中,不同点击行为的数量。点击行为在behavior_log 表中,共四种行为 pv:浏览,cart加入购物车,fav:喜欢,buy:购买。用户性别在user_profile表中,1 为男性,2为女性。
非视图查询:
select
case
when btag = 'pv' then '浏览'
when btag = 'cart' then "加购"
when btag = 'fav' then "喜欢"
when btag = 'buy' then "购买"
end as '行为',
count(btag) as '数量'
from
(
select
userid,
final_gender_code,
btag
from
user_profile as a left join behavior_log as b on a.userid = b.user
) as temp
where
final_gender_code = 1
group by
btag
输出结果:
作为一个合格的数据分析师,查询出来的数据还是要转换下显示样式,比如把字母缩写或者应为名称转换为中文格式显示。
这个查询结果是ok的,可是当我们还要再查询出女生的点击情况,或者每种浏览行为中的男女比例时呢。
这时候如果用视图来创建一个精简过的数据表,然后直接调用视图的化会不会更方便一些呢?下面我们来尝试一下。
先创建一个视图:
# 创建视图的时候可以直接就把数据做一个加工处理,这样在用到的时候看起来也会更方便一些。
create view behavior_table as
select
userid as "用户ID",
if(final_gender_code = 1 , "男","女") as "性别",
case
when b.btag = 'pv' then '浏览'
when b.btag = 'cart' then "加购"
when b.btag = 'fav' then "喜欢"
when b.btag = 'buy' then "购买"
end as '行为'
from
user_profile as a left join behavior_log as b on a.userid = b.user
创建好视图后,我们来先查看下视图中的数据样式。
# 查看视图中的数据
select
*
from
behavior_table
输出结果:
可以看到创建的视图behavior_table中,数据已经进行了格式的转换。
下面我们来使用视图去查询开始的问题(统计所有男性用户中,不同点击行为的数量。)
select
`行为`,
count(`行为`) as '计数'
from
behavior_table
where
`性别` = '男'
group by
`行为`
输出结果:
结果和之前是一样的。
下面再查询浏览行为中男女人数各多少。只需要直接通过创建的视图中去查询就可以了。
select
`性别`,
# 去重可以把重复的用户id去掉
count(distinct `用户ID`) as '计数'
from
behavior_table
where
`行为` = '浏览'
group by
`性别`
输出数据:
视图的一些规则和限制:
- 图名称必须是唯一的,不能与别的视图名字重复,也不能与表的名字重复。
- 可创建视图的数目是没有限制的。
- 视图是可以嵌套的,也就是说创建一个视图的时候可以使用别的是同中的数据来构造一个新的视图。
- 视图不能索引,不能有关联的触发器。
- 视图可以和表一起用,其实视图就是一个虚拟的表,可以和表做表连接。
最后
以上就是冷傲航空为你收集整理的第十二章 - 条件判断(case when 和 if)和视图if 的用法case when 的用法视图(view)的用法的全部内容,希望文章能够帮你解决第十二章 - 条件判断(case when 和 if)和视图if 的用法case when 的用法视图(view)的用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复