Mysql- 流程函数-(If, CASE WHEN)的使用及练习

目录

4.1 If函数语法格式

4.2 CASE WHEN 条件表达式格式

4.3 练习题1

4.4 练习题2

4.5 练习题3-行转列

4.6 牛客练习题

4.7 LeetCode练习题


4.1 If函数语法格式

IF(expr1,expr2,expr3)

解释:

如果表达式expr1=true(expr1 <> 0 and expr1 <> NULL),返回expr2,否则返回expr3,IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

常用示例:

expr1参数为1,结果为真,返回正确

select if(1,'正确','错误');

结果:

4.2 CASE WHEN 条件表达式格式

CASE WHEN condition THEN result
     [WHEN...THEN...]
ELSE result
END

condition是一个返回布尔类型的表达式, 如果表达式返回true,则整个函数返回相应result的值, 如果表达式皆为false,则返回ElSE后result的值,如果省略了ELSE子句,则返回NULL。

4.3 练习题1

数据库

drop table if exists `students`;
create table students
(
    stu_code  varchar(10) null,
    stu_name  varchar(10) null,
    stu_sex   int         null,
    stu_score int         null
);
# 其中stu_sex字段,0表示男生,1表示女生。
INSERT INTO students (stu_code, stu_name, stu_sex, stu_score) VALUES ('xm', '小明', 0, 88);
INSERT INTO students (stu_code, stu_name, stu_sex, stu_score) VALUES ('xl', '夏磊', 0, 55);
INSERT INTO students (stu_code, stu_name, stu_sex, stu_score) VALUES ('xf', '晓峰', 0, 45);
INSERT INTO students (stu_code, stu_name, stu_sex, stu_score) VALUES ('xh', '小红', 1, 89);
INSERT INTO students (stu_code, stu_name, stu_sex, stu_score) VALUES ('xn', '小妮', 1, 77);
INSERT INTO students (stu_code, stu_name, stu_sex, stu_score) VALUES ('xy', '小一', 1, 99);
INSERT INTO students (stu_code, stu_name, stu_sex, stu_score) VALUES ('xs', '小时', 1, 45);

场景1-不同状态下展示为不同的值

题目:

现在学校想要根据学生分数(stu_score)划分等级,score<60返回不及格,score>=60返回及格,score>=80返回优秀。请返回学生的分数(stu_score)和等级(score_cut)

根据示例,你的查询应返回以下结果:

SQL代码:

select stu_score,
       case when stu_score<60 then '不及格'
            when stu_score>=60 and stu_score<80 then '及格'
            when stu_score>=80 then '优秀'
       end as 'score_cut'
from students;

场景2- 统计不同状态下的值

现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。其中stu_sex字段,0表示男生,1表示女生。

根据示例,你的查询应返回以下结果:

select case when stu_sex=0 then '男'
            when stu_sex=1 then '女'
       end 'gender',
       count(*) as 'count_stu',
       sum(if(stu_score>=60,1,0)) as 'pass'
from students
group by gender;

4.4 练习题2

数据库

drop table if exists `energy_test`;
drop table if exists `p_price`;

-- auto-generated definition
create table energy_test
(
    e_code  varchar(2)    null,
    e_value decimal(5, 2) null,
    e_type  int           null
);

# 其中,E_TYPE表示能耗类型,0表示水耗,1表示电耗,2表示热耗
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('北京', 28.50, 0);
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('北京', 23.50, 1);
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('北京', 28.12, 2);
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('北京', 12.30, 0);
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('北京', 15.46, 1);
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('上海', 18.88, 0);
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('上海', 16.66, 1);
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('上海', 19.99, 0);
INSERT INTO energy_test (e_code, e_value, e_type) VALUES ('上海', 10.05, 0);

-- auto-generated definition
create table p_price
(
    p_price decimal(5, 2) null comment '价格',
    p_level int           null comment '等级',
    p_limit int           null comment '阈值'
)
    comment '电能耗单价表';

INSERT INTO p_price (p_price, p_level, p_limit) VALUES (1.20, 0, 10);
INSERT INTO p_price (p_price, p_level, p_limit) VALUES (1.70, 1, 30);
INSERT INTO p_price (p_price, p_level, p_limit) VALUES (2.50, 2, 50);

energy_test

p_price

场景1 - 配合聚合函数做统计

现要求统计各个城市,总共使用了多少水耗、电耗、热耗,使用一条SQL语句输出结果 有能耗表如下:其中,E_TYPE表示能耗类型,0表示水耗,1表示电耗,2表示热耗

根据示例,你的查询应返回以下结果:

select e_code,
    sum(if(e_type=0,e_value,0)) as '水耗',
    sum(if(e_type=1,e_value,0)) as '电耗',
    sum(if(e_type=2,e_value,0)) as '热耗'
from energy_test
group by e_code;

场景2-使用子查询

根据城市用电量多少,计算用电成本。假设电能耗单价分为三档,根据不同的能耗值,使用相应价格计算成本。 P_limit为每个档次的上限。当能耗值(e_value)小于10时,使用P_LEVEL=0时的P_PRICE的值,能耗值大于10小于30使用P_LEVEL=1时的P_PRICE的值…

根据示例,你的查询应返回以下结果:

select e_code,
       e_value,
       case when e_value<(select p_limit from p_price where p_level=0) then (select p_price from p_price where p_level=0)
            when e_value>=(select p_limit from p_price where p_level=0) and e_value<(select p_limit from p_price where p_level=1) then (select p_price from p_price where p_level=1)
            when e_value>=(select p_limit from p_price where p_level=1) then (select p_price from p_price where p_level=2)
           end as 'price'
from energy_test
where e_type=1;

4.5 练习题3-行转列

数据库

drop table if exists `user_col_comments`;

-- auto-generated definition
create table user_col_comments
(
    column_name varchar(50)  null comment '列名',
    comment     varchar(100) null comment '列的备注'
);

INSERT INTO user_col_comments (column_name, comment) VALUES ('SHI_SHI_CODE', '设施编号');
INSERT INTO user_col_comments (column_name, comment) VALUES ('SHUI_HAO', '水耗');
INSERT INTO user_col_comments (column_name, comment) VALUES ('RE_HAO', '热耗');
INSERT INTO user_col_comments (column_name, comment) VALUES ('YAN_HAO', '盐耗');
INSERT INTO user_col_comments (column_name, comment) VALUES ('OTHER', '其他');

问题:将上表的行列进行转换显示

根据示例,你的查询应返回以下结果:

select max(if(column_name='SHI_SHI_CODE',comment,'')) as 'SHI_SHI_CODE',
       max(if(column_name='YAN_HAO',comment,'')) as 'YAN_HAO',
       max(if(column_name='RE_HAO',comment,'')) as 'RE_HAO',
       max(if(column_name='SHUI_HAO',comment,'')) as 'SHUI_HAO',
       max(if(column_name='OTHER',comment,'')) as 'OTHER'
from user_col_comments;

4.6 牛客练习题

SQL26 - 计算25岁以上和以下的用户数量

4.7 LeetCode练习题

  • LeetCode_1873. 计算特殊奖金

  • LeetCode_627. 变更性别

  • LeetCode_608. 树节点

  • LeetCode_1393. 股票的资本损益

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

element-plus组件中的el-drawer的使用

在项目的制作过程中经常会用到弹窗组件&#xff0c;这里假设一种情况当你在一个页面需要多个弹窗组件的时候怎么样才能精准的打开和关闭对应的弹窗呐&#xff1f;&#xff1f; ① 绑定一个点击事件----【给点击事件传入一个下标】这里是打开事件 ② 使用element-plus中的 :befo…

Redis系列之keys命令和scan命令性能对比

项目场景 Redis的keys *命令在生产环境是慎用的&#xff0c;特别是一些并发量很大的项目&#xff0c;原因是Redis是单线程的&#xff0c;keys *会引发Redis锁&#xff0c;占用reids CPU&#xff0c;如果key数量很大而且并发是比较大的情况&#xff0c;效率是很慢的&#xff0c…

ActiveMQ 反序列化漏洞(CVE-2015-5254)

ActiveMQ 反序列化漏洞 Apache ActiveMQ是一种开源的消息代理&#xff08;message broker&#xff09;&#xff0c;被广泛用于应用程序之间的消息传递。它提供可靠的消息传递模式&#xff0c;如发布/订阅、点对点和请求/响应&#xff0c;非常适合构建分布式系统和应用程序集成…

感觉到自己思想扭曲了

突然觉得自己思想有点扭曲。 ​起因是近期备婚&#xff0c;需要给男方家人买衣服。问男朋友妹妹衣服预算多少&#xff0c;说是500内&#xff0c;然后想想自己这个新娘子&#xff0c;那一身衣服绞尽脑汁凑满减不到300。再联想到装饰新房&#xff0c;新房买家具&#xff0c;为了省…

为 3D 模型制作纹理的 9 种最佳方法

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 与普遍的看法相反&#xff0c;3D 模型的纹理创建更加简单。虽然对细节…

【PyQt学习篇 · ⑫】:QVBoxLayout和QHBoxLayout布局管理器的使用

文章目录 QVBoxLayout和QHBoxLayout的介绍.addStretch()的使用方法.setSpacing()方法的使用.setAlignment()的使用.setFixedSize()的使用QMainWindow中使用布局管理器 QVBoxLayout和QHBoxLayout的介绍 QVBoxLayout 和 QHBoxLayout 是 PyQt 中用于实现垂直和水平布局的两个布局…

CoreDNS实战(五)-接入prometheus监控

1 背景 Prometheus插件作为coredns的Plugins&#xff0c;默认情况下是内置在coredns中&#xff0c;如果是自己编译安装的版本&#xff0c;需要注意在编译安装的时候的plugin.cfg文件中添加了prometheus:metrics&#xff0c;这样才能确保编译成功。 # 首先我们检查一下运行的版…

Python-炸弹人【附完整源码】

炸弹人 炸弹人是童年的一款经典电子游戏&#xff0c;玩家控制一个类似"炸弹人"的角色&#xff0c;这个角色可以放置炸弹&#xff0c;并在指定的时间内引爆它们消灭敌人以达到目标&#xff0c;此游戏共设有两节关卡&#xff0c;代码如下&#xff1a; 运行效果&#x…

介绍几个有意思的 GitHub 仓库

大家好&#xff0c;我是风筝。 今天介绍几个很有意思的 github 开源项目&#xff0c;看过之后就会发现&#xff0c;github 果然深意暗藏。 GitHub对于程序员来说&#xff0c;再熟悉不过了&#xff0c;绝大多数时候&#xff0c;我们到上面都是为了学习高质量的源代码&#xff…

12 月 10 日,融云在 Google DevFest 上海站等你!

Welcome to DevFest!RongCloud2023 Google DevFest 上海站关注【融云全球互联网通信云】了解更多 时间&#xff1a;2023 年 12 月 10 日&#xff08;周日&#xff09;地点&#xff1a;上海市浦东新区新金桥路 1599 号&#xff0c;东方万国宴会中心 (下沉式广场)主讲&#xff1a…

Unity3D对CSV文件操作(创建、读取、写入、修改)

系列文章目录 Unity工具 文章目录 系列文章目录前言一、Csv是什么&#xff1f;二、创建csv文件2-1、构建表数据2-2、创建表方法2-3、完整的脚本&#xff08;第一种方式&#xff09;2-4、运行结果2-5、完整的脚本&#xff08;第二种方式&#xff09;2-6、运行结果2-7、想用哪种…

【性能测试】业务/吞吐量与存量数据设计关系+压测常见解决方案

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能测试中业务…

设计模式之GoF23介绍

深入探讨设计模式&#xff1a;构建可维护、可扩展的软件架构 一、设计模式的背景1.1 什么是设计模式1.2 设计模式的历史 二、设计模式的分类2.1 创建型模式2.2 结构型模式2.3 行为型模式 三、七大设计原则四、设计模式关系结论 :rocket: :rocket: :rocket: 在软件开发领域&…

软件工程之系统质量

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一 、质量标准化 1.什么是质量标准化 通过标准化各条业务线的研发流程&#xff0c;以做的比较好的业务线作为标准样板间&#xff0c;规范出一套标…

使用squid配置高匿代理

背景介绍 为什么要设置高匿代理&#xff1f; 在家和开放平台交互的时候&#xff0c;需要设置白名单&#xff0c;否则无法交互。家里的白名单一直变。 服务部署到服务器太麻烦&#xff0c;调试不方便。 于是就想通过代理的方式&#xff0c;让服务器替我发送这次请求&#xf…

使用Java语言进行账户登录和密码输入

一、操作原理 使用Scanner扫描器进行扫描&#xff0c;使用if语句、if-else语句和else进行账户和密码的验证。 二、相关代码 import java.util.Scanner; public class CheckLoginDemo {public static void main(String[] args){try (Scanner scan new Scanner(System.in)) …

方格取数问题

更好的阅读体验 方格取数。 题目&#xff1a;方格取数 设有 NN 的方格图&#xff0c;我们在其中的某些方格中填入正整数&#xff0c;而其它的方格中则放入数字0。如下图所示&#xff1a; 某人从图中的左上角 A 出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&#x…

设备制造行业CRM:提升客户满意度,驱动业务增长

设备制造行业客户需求多样化、服务链路长&#xff0c;企业在关注APS、EMS等工业软件之余还要以客户为中心&#xff0c;做好客户服务。设备制造行业CRM管理系统是企业管理客户关系的利器&#xff0c;设备制造行业CRM的作用有哪些&#xff1f;一文带您看懂。 设备制造行业需要解…

金蝶云星空单据编辑界面,不允许批量填充操作

文章目录 金蝶云星空单据编辑界面&#xff0c;不允许批量填充操作案例演示开发设计测试 金蝶云星空单据编辑界面&#xff0c;不允许批量填充操作 案例演示 售后单&#xff0c;明细信息单据体&#xff0c;物料编码字段禁止批量填充。 开发设计 编写表单插件&#xff0c;在Be…

绝地求生游戏一定要先训练吗?

绝地求生&#xff08;PlayerUnknowns Battlegrounds&#xff0c;简称PUBG&#xff09;作为一款大热的多人在线生存游戏&#xff0c;自上线以来一直备受玩家追捧。对于新手玩家来说&#xff0c;刚接触这款游戏时常常觉得难以上手&#xff0c;需要进行一定的训练才能够在游戏中取…