第十二章 - 条件判断(case when 和 if)和视图

news2025/7/24 2:50:47

第十二章 - 条件判断(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 列名
		when1 then a
        when2 then b
        when3 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
	`性别`

输出数据:
在这里插入图片描述

视图的一些规则和限制:

  • 图名称必须是唯一的,不能与别的视图名字重复,也不能与表的名字重复。
  • 可创建视图的数目是没有限制的。
  • 视图是可以嵌套的,也就是说创建一个视图的时候可以使用别的是同中的数据来构造一个新的视图。
  • 视图不能索引,不能有关联的触发器。
  • 视图可以和表一起用,其实视图就是一个虚拟的表,可以和表做表连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/368405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

资源限制类题目七大技巧 解决所有大数据资源限制类问题

有一个无符号整数的文件&#xff0c;数据个数有40亿个&#xff0c;如何通过1G的内存返回出现次数最多的数 1. 对每个数调用哈希函数得到哈希值&#xff0c;将哈希值模上100&#xff0c;进行小文件分类&#xff08;相同的数一定在同一文件&#xff09; 2. 将每个小文件内出现次…

前向传播与反向传播参数的更新方式(附公式代码)

前向传播与反向传播意义及其参数的更新方式 文章目录前向传播与反向传播意义及其参数的更新方式一、前言二、前反向传播的作用三、前向传播四、反向传播代码一、前言 因为本身非科班出身&#xff0c;数学又学的很差&#xff0c;一直都是傻瓜式地用tensorflow和pytorch搭网络。…

「RISC-V Arch」SBI 规范解读(下)

第六章 定时器扩展&#xff08;EID #0x54494D45"TIME"&#xff09; 这个定时器扩展取代了遗留定时器扩展&#xff08;EID #0x00&#xff09;&#xff0c;并遵循 v0.2 中定义的调用规约。 6.1 函数&#xff1a;设置定时器&#xff08;FID #0&#xff09; struct sbi…

同花顺面试(部分)

又没录上&#xff0c;只能凭零星记忆来记录了 知识图谱有了解吗&#xff0c;知道用在你们系统哪个环节吗tomcat内存设置的多大。32位系统的话有限制吗&#xff1f;复盘&#xff1a;后面一想&#xff0c;可能是说32位系统地址寻址空间有限&#xff0c;内存最多4Ggprc你们用的序…

消息队列--Kafka

Kafka简介集群部署配置Kafka测试Kafka1.Kafka简介 数据缓冲队列。同时提高了可扩展性。具有峰值处理能力&#xff0c;使用消息队列能够使关键组件顶住突发的访问压力&#xff0c;而不会因为突发的超负荷的请求而完全崩溃。 Kafka是一个分布式、支持分区的&#xff08;partition…

C/C++开发,无可避免的内存管理(篇一)-内存那些事

一、内存管理机制 任何编程语言在访问和操作内存时都会涉及大量的计算工作。但相对其他语言&#xff0c;c/c开发者必须自行采取措施确保所访问的内存是有效的&#xff0c;并且与实际物理存储相对应&#xff0c;以确保正在执行的任务不会访问不应该访问的内存位置。C/C语言及编译…

【Java】volatile

一、volatile volatile是Java虚拟机提供的轻量级的同步机制&#xff0c;它有&#xff13;个特性&#xff1a; &#xff11;&#xff09;保证可见性 &#xff12;&#xff09;不保证原子性 &#xff13;&#xff09;禁止指令重排 当写一个volatile变量时&#xff0c;JMM会把该…

openEuler部署Ceph集群(块存储)

openEuler部署Ceph集群1 目标2 环境2.1 服务器信息2.2 软件信息3 部署流程3.1 获取系统镜像3.2 创建虚拟机3.3 配置虚拟机3.3.1 配置互信3.3.2 关闭防火墙3.3.3 配置免密登录3.3.4 配置NTP3.3.4.1 安装NTP服务3.3.4.2 配置NTP服务端3.3.4.3 配置NTP客户端3.3.4.4 启动NTP服务3.…

pyqt5通过CANoe COM Server来操作CANoe仿真工程

文章目录前言一、COM接口技术二、UI界面设计三、功能实现四、工程运行测试前言 继续学习《CANoe开发从入门到精通》。 今天在《CANoe仿真工程开发》的基础上&#xff0c;开发实现pyqt5应用程序来操控CANoe工程。 一、COM接口技术 COM&#xff08;Component Object Model&…

Linux基础命令-find搜索文件位置

文章目录 find 命令介绍 语法格式 命令基本参数 参考实例 1&#xff09;在root/data目录下搜索*.txt的文件名 2&#xff09;搜索一天以内最后修改时间的文件&#xff1b;并将文件删除 3&#xff09;搜索777权限的文件 4&#xff09;搜索一天之前变动的文件复制到test…

不懂什么是智慧工厂,看这篇文章就够了!

一、智慧工厂是什么&#xff1f; 一直以来&#xff0c;自动化在某种程度上始终是工厂的一部分&#xff0c;甚至高水平的自动化也非新生事物。然而&#xff0c;“自动化”一词通常表示单一且独立的任务或流程的执行。过去&#xff0c;机器自行“决策”的情况往往是以自动化为基…

【基础篇】9 # 排序:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)

说明 【数据结构与算法之美】专栏学习笔记 如何分析一个排序算法&#xff1f; 1、排序算法的执行效率 最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数 、低阶比较次数和交换&#xff08;或移动&#xff09;次数 2、排序算法的内存消耗 3、排序算法的稳定…

Fabric.js使用说明Part 2

目录一、Fabric.js使用说明Part 1Fabric.js简介 开始方法事件canvas常用属性对象属性图层层级操作复制和粘贴二、Fabric.js使用说明Part 2锁定拖拽和缩放画布分组动画图像滤镜渐变右键菜单删除三、Fabric.js使用说明Part 3自由绘画绘制背景图片绘制文本绘制线和路径一、锁定Fab…

传统豪华品牌引领?智能座舱进入「沉浸式娱乐体验」新周期

智能座舱正在进入硬件定型、软件&#xff08;功能&#xff09;升级以及多应用融合的新周期。 高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车搭载智能数字座舱&#xff08;大屏语音车联网OTA&#xff09;前装标配交付795…

【死磕数据库专栏启动】在CentOS7中安装 MySQL5.7版本实战

文章目录前言实验环境一. 安装MySQL1.1 配置yum源1.2 安装之前的环境检查1.3 下载MySQL的包1.4 开始使用yum安装1.5 启动并测试二. 设置新密码并重新启动2.1 设置新密码2.2 重新登录测试总结前言 学习MySQL是一件比较枯燥的事情&#xff0c;学习开始之前要先安装MySQL数据库&a…

【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 磁盘结构/文件系统/软硬链接/动静态库前言一.磁盘结构1.1 磁盘的物理结构1.2 磁盘的存储结构1.3 磁盘的逻辑结构二.理解文件系统2.1 对IO单位的优化2.2 磁盘分区与分组2.3 分组的管理方法2.4 文件操作三.软硬链接3.1理解硬…

测试4年裸辞失业,面试17k的测试岗被按在地上摩擦,结局让我崩溃大哭...

作为IT行业的大热岗位——软件测试&#xff0c;只要你付出了&#xff0c;就会有回报。说它作为IT热门岗位之一是完全不虚的。可能很多人回说软件测试是吃青春饭的&#xff0c;但放眼望去&#xff0c;哪个工作不是这样的呢&#xff1f;会有哪家公司愿意养一些闲人呢&#xff1f;…

「smardaten」上架钉钉应用中心!让进步再一次发生

使用钉钉的团队小伙伴们&#xff0c;smardaten给您送来福利啦~为了给更多团队提供更优质的应用开发体验&#xff0c;方便用户在线、快速使用无代码&#xff0c;数睿数据近期在【钉钉应用中心】发布smardaten在线版本。继与华为云、亚马逊云建立战略合作之后&#xff0c;smardat…

微信小程序实现分享到朋友圈的功能

分享朋友圈官方API&#xff1a;分享到朋友圈 1、分享到朋友圈接口设置事项 2、onShareTimeline()注意事项 3、分享朋友圈后&#xff0c;测试发现&#xff0c;没有数据请求。 用户在朋友圈打开分享的小程序页面&#xff0c;并不会真正打开小程序&#xff0c;而是进入一个“小程…

浏览器缓存策略

先走强缓存&#xff0c;再走协商缓存 强缓存 不发送请求&#xff0c;直接使用缓存的内容 状态码200 当前会话没有关闭的话就是走memory cache&#xff0c;否则就是disk cache 由响应头的 Pragma&#xff08;逐渐废弃&#xff0c;优先级最高&#xff09;&#xff0c;catch-…