【MySQL】流程控制函数CASE

2023-11-11

1.流程控制函数CASE

  • IF(value,value1,value2) 如果value的值为TRUE,返回value1,否则返回value2。
  • IFNULL(value1, value2)如果value1不为NULL,返回value1,否则返回value2。
  • CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2… [ELSE resultn] END。相当于Java的if…else if…else…
  • CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN值1 … [ELSE 值n] END。相当于Java的switch…case…
SELECT IF (1 > 0, '对', '错') 
# 对

SELECT IFNULL(NULL, 'hello')
# hello 

# 注意CASE和END成对使用
SELECT CASE 'a'
	WHEN 'a' THEN 
	  'aaaaa'
	WHEN 'b' THEN
		'bbbbb'
	ELSE
		'ccccc'
END;

SELECT CASE 
	WHEN 'a' > 'b' THEN 'a > b'
	ELSE 'a < b' END;

# 注意salary后面的逗号
SELECT employee_id, salary, CASE
	WHEN salary > 10000 THEN '1'
	WHEN salary > 5000 THEN '2'
	ELSE '3' END
FROM employees;

SELECT oid,`status`, CASE `status` 
	WHEN 1 THEN '未付款'
	WHEN 2 THEN '已付款'
	WHEN 3 THEN '已发货'
	WHEN 4 THEN '确认收货'
	ELSE '无效订单' END
FROM t_order;

2.练习

# 1.显示系统时间(注:日期+时间)
SELECT NOW()
FROM DUAL;

SELECT SYSDATE()
FROM DUAL;

# 2.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)
SELECT employee_id, last_name, salary, salary * 1.2 AS new_salary 
FROM employees;

# 3.将员工的姓名按首字母排序,并写出姓名的长度(length)
SELECT last_name, LENGTH(last_name) length 
FROM employees
ORDER BY last_name DESC; --降序排序

# 4.查询员工id,last_name,salary,并作为一个列输出,别名为OUT_PUT
SELECT CONCAT(employee_id, ' ', last_name, ' ', salary ) OUT_PUT 
FROM employees;

# 5.查询公司各员工工作的年数、工作的天数,并按工作年数的降序排序
SELECT last_name, DATEDIFF(SYSDATE(), hire_date) / 365 AS worked_years, DATEDIFF(SYSDATE(), hire_date) AS worked_days
FROM employees
ORDER BY worked_years DESC;

# 6.查询员工姓名,hire_date, department_id,满足以下条件:雇用时间在1997年之后,department_id为80 或 90 或110, commission_pct不为空
SELECT last_name, hire_date, department_id
FROM employees
WHERE DATE_FORMAT(hire_date, '%Y') >= 1997
AND department_id IN (80,90,110)
AND commission_pct IS NOT NULL;

# 7.查询公司中入职超过10000天的员工姓名、入职时间
SELECT last_name, hire_date
FROM employees
WHERE DATEDIFF(NOW(), hire_date) > 10000;

# 8.做一个查询,产生下面的结果 <last_name> earns <salary> monthly but wants <salary*3>
SELECT CONCAT(last_name, ' earns ', salary, ' monthly but wants ' , salary * 3) AS 'Dream Salary'
FROM employees;  -- 结果有两位小数

SELECT CONCAT(last_name, ' earns ', TRUNCATE(salary,0), ' monthly but wants ' , TRUNCATE(salary * 3, 0)) AS 'Dream Salary'
FROM employees;  -- 小数个数为0

# 9.使用case-when,按照下面的条件:
-- job grade
-- AD_PRES A
-- ST_MAN B
-- IT_PROG C
-- SA_REP D
-- ST_CLERK E
SELECT e.last_name, e.job_id,
CASE job_id
	WHEN 'AD_PRES' THEN 'A'
	WHEN 'ST_MAN' THEN 'B' 
	WHEN 'IT_PROG' THEN 'C' 
	WHEN 'SA_REP' THEN 'D' 
	WHEN 'ST_CLERKemployees.job_id' THEN 'E'
	ELSE 'F'
END 'grade'
FROM employees e;
# 注意此处jobid的when 和 then都要加'',因为是varchar
# 注意END后接'grade'为新列列名

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MySQL】流程控制函数CASE 的相关文章

  • 在同一个表上组合两个 SQL SELECT 语句

    我想结合这两个 SQL 查询 SELECT FROM Contracts WHERE productType RINsell AND clearTime IS NULL AND holdTime IS NOT NULL ORDER BY g
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • 具有 LINQ 支持的最完整的 ORM?

    我正在寻找一个提供完整或接近完整的 LINQ 支持的 ORM LINQ 到 SQL 支持 LINQ 内部的所有内容 Contains Math Log 等 在不创建新数据上下文的情况下无法预先加载关系属性 ADO NET 实体框架 糟糕的
  • 执行许多插入重复键更新错误:未使用所有参数

    所以我一直在尝试使用 python 2 7 15 使用 mysql connector 执行此查询 但由于某种原因 它似乎不起作用并且总是返回错误 并非所有参数都被使用 表更新有一个主键 即 ID 这是我尝试运行此 SQL 的查询 sql
  • SQL Server PIVOT 函数

    我有一个检索所有代理及其模块的查询 结果集将每个模块返回 1 行 SELECT am agentID AS agentid pa agentDisplayName agentdisplayname m ModuleName ModuleNa
  • MySQL 触发器和 SUM()

    我有两张桌子 学生桌和家庭桌 在学生中 我有列 st venue 和total venue 家里我有收入 Total Revenue 是学生 st 收入与家庭收入之和 其中 family id student student id stud
  • MySQL“选择更新”行为

    根据 MySql 文档 MySql 支持多粒度锁定 MGL case 1 开放航站楼 1 连接到mysql mysql gt start transaction Query OK 0 rows affected 0 00 sec mysql
  • RMySQL fetch - 找不到继承的方法

    使用 RMySQL 我想将数据从数据库加载到 R 中的数据帧中 为此 我使用以下代码 R连接数据库 con lt dbConnect MySQL user root password password dbname prediction h
  • 如何将自定义类型数组传递给 Postgres 函数

    我有一个自定义类型 CREATE TYPE mytype as id uuid amount numeric 13 4 我想将它传递给具有以下签名的函数 CREATE FUNCTION myschema myfunction id uuid
  • SQL Server 查询结果集的大小

    SQL Server 中是否有确定结果集中 Mgmt Studio 查询中返回的数据大小 以 MEGS 为单位 您可以打开客户端统计信息 查询菜单 包括客户端统计信息 它给出执行查询时从服务器返回的字节数
  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • 本地数据库缓存的最佳实践?

    我正在开发一个应用程序 该应用程序的部分内容依赖于 MySQL 数据库 在某些情况下 应用程序将在互联网连接 UMTS 有限的环境中运行 特别是延迟较高的环境 应用程序的用户能够登录 并且应用程序用户界面的大部分内容都是从 MySQL 数据
  • Laravel Sum 列数据库 Eloquent

    尝试获取我的一个表中 int 字段的总和应该非常容易 不幸的是 事实并非如此 因为无论我使用 Laravel MySQL 还是 Excel 我都会得到不同的结果 Laravel 5 4 给了我20506 Table sum field na
  • Quartz.NET 设置 MisfireInstruction

    我正在使用 Quartz NET 在 C 中工作 并且在 CronTrigger 上设置失火指令时遇到问题 我正在运行安装了 Quartz DB 的 SQL 后端 我有以下代码 可以很好地创建作业和运行调度程序 IScheduler sch
  • 数据表 - 服务器端处理 - 数据库列合并

    我目前正在使用 DataTables 1 10 5 服务器端处理功能 http www datatables net examples data sources server side html http www datatables ne
  • Laravel Group By 和 Order By 不起作用

    我尝试制作一个Laravel 5 8项目 项目中的数据是这样的 id purch name prcvalue 1 10234 Nabila 100 2 10234 Nadeera 450 3 10234 Nabila 540 4 10234
  • 我可以在一个查询中更新/选择表吗?

    我需要在查看页面时选择数据并更新 视图 列 有没有一种方法可以在一个查询中执行此操作 或者我是否必须使用不同的查询 如果您不想 不需要使用事务 则可以创建一个存储过程 该过程首先更新视图计数 然后选择值并将其返回给用户
  • 如何通过循环变量在 dbt 中多次运行 SQL 模型?

    我有一个 dbt 模型 测试模型 接受地理变量 zip state region 在配置中 我想通过循环变量来运行模型三次 每次使用不同的变量运行它 问题是 我有一个如下所示的宏 它将变量附加到输出表名称的末尾 即运行测试模型 with z
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • 通过将行旋转为动态数量的列来在 MySQL 中创建摘要视图

    我在 MySQL 中有一个表 其中包含以下字段 id company name year state 同一客户和年份有多行 以下是数据示例 id company name year state 1 companyA 2008 1 2 com

随机推荐

  • Hbase集成到Hadoop的一些注意事项

    安装 部署hadoop和hbase的文章网上已经很多了 这里说下自己安装 部署时遇到的 一些问题 1 hadoop env sh的文件里添加 export HADOOP CLASSPATH HBASE HOME hbase 0 20 3 j
  • 华硕主板怎么进入bios

    bios是电脑的基本输入输出系统 有一些电脑系统设置等需要在bios系统内完成 比如说cpu电压 温度等参数设置 磁盘模式修改 硬盘启动项顺序修改等等都是需要bios内完成 有使用华硕电脑的用户不知道华硕主板怎么进入bios 下面小编就教下
  • 联合Java攻城狮社区,推出Java技能树有奖征文活动,期待你的加入

    目录 一 立志存高远 笃行践初心 二 如何学习Java 三 哪吒造Java技能树 1 CSDN官方技能树 2 哪吒造山寨版Java技能树 3 技能树评委 4 通过打榜赢取精美礼物 5 如何参与Java技能树征文活动呢 四 社区版每日一题活动
  • 用户忠诚度:小程序积分商城的用户保持方法

    随着移动互联网的蓬勃发展 小程序积分商城已经成为了许多企业私域营销的热门选择 这个商城不仅可以吸引用户参与 还可以提高用户的忠诚度 进一步加深用户与品牌的互动关系 然而 要实现用户的忠诚度 需要一系列的策略和方法 本文将深入探讨如何通过小程
  • 源码解析Collections.sort ——从一个逃过单测的 bug 说起

    本文从一个小明写的bug 开始 讲bug的发现 排查定位 并由此展开对涉及的算法进行图解分析和源码分析 事情挺曲折的 因为小明的代码是有单测的 让小明更加笃定自己写的没问题 所以在排查的时候 也经历了前世的500年 去排查排序后的list改
  • 【OpenCV】读入数字图像基础操作学习笔记

    目录 读入数字图像 窗口中显示图像 将图像保存到本地 窗口销毁 打开窗口就要销毁 以免影响后续十月 等待输入 读入数字图像 cv2 imread 所需读入的图像的完整路径 若图像在程序下的文件夹下也可直接输入图像名称 读入图像的形式 读入图
  • 深刻理解JNDI

    JNDI是J2EE的核心技术之一 JNDI的功能简单说就是可以简单的方式去查找某种资源 比如在Tomcat中配置了一个JNDI数据源 那么在程序中之需要用Java标准的API就可以查找到这个数据源 以后数据源配置发生变化了 等等 程序都不需
  • 【菜鸟教程】Kafka消息队列入门中(生产者、消费者、数据一致性)

    工作流程 如下图 topicA是一个3分区2副本的topic 2副本表示leader和follower加起来一共为2 注意leader和follower是不在一个broker的 即不在一台服务器 否则服务器故障时会一起挂掉 备份将没有意义
  • 区块链相关术语(中英对照)

    原文链接 https wiki learnblockchain cn bitcoin en zh html 说明 阅读英文文档是编程开发过程中最常做的一件事 英文阅读也是一个程序员的基本能力 区块链刚刚起步 每天各种新概念层出不穷 为方便大
  • springboot 实现切面校验请求参数

    1 定义切面类 package com aa aa pp interceptor import com alibaba fastjson JSON import com alibaba fastjson JSONObject import
  • 二叉树经典题目

    1 判断一个节点是否在一棵二叉树中 先判断是否在左子树 若在 则不再去右子树中寻找 若不在 再去右子树中寻找 要注意递归的条件判断 bool IsInTree Node root Node node if root NULL node NU
  • aardio - 利用web.view2库编写多标签浏览器

    web view2 为风行者封装 请下载最新版本使用 暂时还不是很完善 运行过程中偶尔会出现闪退现象 运行效果 示例代码 import win ui DSG var winform win form text aardio form rig
  • 内网安全-黄金票据和白银票据

    文章目录 前言 黄金票据 原理 应用场景 应用条件 防御 白银票据 原理 应用条件 黄金票据和白银票据的区别 前言 前置知识是需要熟悉Kerberos协议的认证流程 可以看前一篇文章 黄金票据 原理 在熟悉了Kerberos协议的认证流程后
  • java毕业设计球迷信息交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计球迷信息交流论坛源码 lw文档 mybatis 系统 mysql数据库 调试 java毕业设计球迷信息交流论坛源码 lw文档 mybatis 系统 mysql数据库 调试 项目架构 B S架构 开发语言 Java语言 开发软
  • WIN11如何设置环境变量

    在win11系统中运行环境 比如node js的时候 我们需要进行额外的参数设置 才能继续进行操作 而这个参数设置就是常说的环境变量设置 那么win11系统的环境变量到底怎么进行配置呢 1 键盘输入 win R 打开运行框 2 输入命令 c
  • (十六)Mybatis整合EhCache缓存框架用法详解

    这篇文章主要讲述Mybatis整合EhCache缓存框架用法详解 写的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 目录 什么是EhCache 代码示例 1 导入第三方缓存包 2 配置缓存元
  • 关于javamail的一些笔记

    1 为什么要学习javamail 企业中系统 经常需要信息通知 和 信息校验 2 利用telnet实现邮件收发 注册sina和sohu账户 yuyang94895 sina com yuyang94895 sohu com 密码 1qaz2
  • unityhub登录不上,登录界面刷新不出来, 或检测不到Unity

    如果是登录界面白屏的话 或 检测不到Unity 可以尝试 1 关闭hub 右下角也要退出 找不到的可以直接任务管理器退出 2 删除 UserProfile AppData Roaming 里面的 UnityHub Cache和 Unity
  • 汇编程序设计与计算机体系结构,《汇编程序设计与计算机体系结构:软件工程师教程》 —2.8 作业...

    2 8 作业 2 8 1 内存 有这样一个算式 taxableIncome salary exempts percent401k 100 salary 其中的变量 salary 50000 exempts 7000 percent401k
  • 【MySQL】流程控制函数CASE

    文章目录 1 流程控制函数CASE 2 练习 1 流程控制函数CASE IF value value1 value2 如果value的值为TRUE 返回value1 否则返回value2 IFNULL value1 value2 如果val