SQL的case when then else end语句的用法

SQL之CASE WHEN用法详解 现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。当能耗值小于10时,使用P_LEVEL=0时的P_PRICE的值,能耗值大于10小于30使用P_LEVEL=1时的P_PRICE的值…如果表达式皆为false,则返回ElSE后result的值,如果省略了ELSE子句,则返回NULL。假设电能耗单价分为三档,根据不同的能耗值,使用相应价格计算成本。有能耗表如下:其中,E_TYPE表示能耗类型,0表示水耗,1表示电耗,2表示热耗。 阅读详情
SELECT a.managecom,  
       a.subtype,  
       count(*) loadsucc,  
       sum(case when a.state in  ('4', '5', '6', '7', '8', '9') then 1 else 0 end) recogsucc,  
       sum(case when a.state in  ('3', '12', '13') then 1 else 0 end) recogfail,  
       sum(case when a.state in  ('1', '2') then 1 else 0 end) waitrecog  
  FROM ocr_docdetail a, ocr_loaddetail c  
 WHERE 1 = 1  
   and a.managecom like '86%'  
   and a.managecom = c.managecom  
   and a.bussno = c.bussno  
   and a.subtype = c.subtype  
   and c.loadstate = 0  
   and c.scandate >= date '2012-07-29'  
   and c.scandate <= date '2013-01-07'  
 group by a.managecom, a.subtype  
 order by a.managecom, a.subtype;

 

case具有两种格式。简单case函数和case搜索函数。

--简单case函数

            case sex

            when '1' then '男'

            when '2' then '女'

            else '其他' end

--case搜索函数

            case when sex = '1' then '男'

            when sex = '2' then '女'

            else '其他' end

 

这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。 
还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

--比如说,下面这段sql,你永远无法得到“第二类”这个结果

            case when col_1 in ( 'a', 'b') then'第一类'

            when col_1 in ('a')       then '第二类'

            else '其他' end

 

 

 

下面我们来看一下,使用case函数都能做些什么事情。 

一,已知数据按照另外一种方式进行分组,分析。 

有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为primary key)

国家(country)

人口(population)

中国

600

美国

100

加拿大

100

英国

200

法国

300

日本

250

德国

200

墨西哥

50

印度

250


根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。

洲

人口

亚洲

1100

北美洲

250

其他

700


想要解决这个问题,你会怎么做?生成一个带有洲code的view,是一个解决方法,但是这样很难动态的改变统计的方式。 
假如使用case函数,sql代码如下:

select sum(population),

            case country

            when '中国'     then'亚洲'

            when '印度'     then'亚洲'

            when '日本'     then'亚洲'

            when '美国'     then'北美洲'

            when '加拿大'  then'北美洲'

            when '墨西哥'  then'北美洲'

            else '其他' end

            from   table_a

            group by case country

            when '中国'     then'亚洲'

            when '印度'     then'亚洲'

            when '日本'     then'亚洲'

            when '美国'     then'北美洲'

            when '加拿大'  then'北美洲'

            when '墨西哥'  then'北美洲'

            else '其他' end;

 

注:

在上面这个例子中,其实select 了两个字段:sum(population), case country;

country 字段里面原来有很多值,有“中国,美国,日本,加拿大...”等等,select后的case when then else end其实就是相当于把country的值分为三类:"亚洲,北美洲,其他";

其实没有from后面的case when语句,其结果集是这样的,sum得到的是人口population的总数,所以需要将population分组,就有了后面的group by:

 

后面的case when语句,其实是将前面查询的字段case country进行分组,分成三组:"亚洲,北美洲,其他",然后就能得出结果来

 


同样的,我们也可以用这个方法来判定工资的等级,并统计每一等级的人数。sql代码如下;

select

            case when salary <= 500 then '1'

            when salary > 500 and salary <= 600  then '2'

            when salary > 600 and salary <= 800  then '3'

            when salary > 800 and salary <= 1000 then '4'

            else null end salary_class,

            count(*)

            from   table_a

            group by

            case when salary <= 500 then '1'

            when salary > 500 and salary <= 600  then '2'

            when salary > 600 and salary <= 800  then '3'

            when salary > 800 and salary <= 1000 then '4'

            else null end;


二,用一个sql语句完成不同条件的分组。 

有如下数据

国家(country)

性别(sex)

人口(population)

中国

1

340

中国

2

260

美国

1

45

美国

2

55

加拿大

1

51

加拿大

2

49

英国

1

40

英国

2

60


按照国家和性别进行分组,得出结果如下

国家

男

女

中国

340

260

美国

45

55

加拿大

51

49

英国

40

60


普通情况下,用union也可以实现用一条语句进行查询。但是那样增加消耗(两个select部分),而且sql语句会比较长。 
下面是一个是用case函数来完成这个功能的例子

select country,

            sum( case when sex = '1' then

            population else 0 end),  --男性人口

            sum( case when sex = '2' then

            population else 0 end)   --女性人口

            from table_a

            group by country;


这样我们使用select,完成对二维表的输出形式,充分显示了case函数的强大。 

三,在check中使用case函数。 

在check中使用case函数在很多情况下都是非常不错的解决方法。可能有很多人根本就不用check,那么我建议你在看过下面的例子之后也尝试一下在sql中使用check。
下面我们来举个例子 
公司a,这个公司有个规定,女职员的工资必须高于1000块。假如用check和case来表现的话,如下所示

constraint check_salary check

            ( case when sex = '2'

            then case when salary > 1000

            then 1 else 0 end

            else 1 end = 1 )


假如单纯使用check,如下所示

constraint check_salary check

            ( sex = '2' and salary > 1000 )


女职员的条件倒是符合了,男职员就无法输入了。

 

转自:http://blog.youkuaiyun.com/xuxurui007/article/details/8479953

 

YOLOv5s模型训练全流程解析:从数据准备到实战检测 本文详细解析了YOLOv5s模型训练的全流程,涵盖从环境搭建、数据准备与格式转换,到模型训练、参数调优及实战检测的完整步骤。文章提供了具体的代码示例和常见问题解决方案,旨在帮助开发者,特别是新手,高效掌握YOLOv5s模型训练的核心技术,并成功应用于实际检测任务中。 阅读详情

相关推荐

stm32H743基于CubeMX配置为双ADC多通道DMA规则采样

stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。 需求: 使用stm32H743的ADC采集5路ovrc

xtqbp的博客 4363

sql语句之case when的用法

应用场景: 当需要从数据源上直接判断数据显示带不动含义的时候,就可以在SQL语句中使用case when 函数。 语法如下: Case具有两种格式。简单Case函数和Case搜索函数。 简单Case函数格式: CASE 列名 WHEN 条件值1 THEN 选项1 WHEN 条件值2 THEN 选项2 …… ELSE 默认值 END (注释:列名,这里是sex,如果放在case后,则显示在屏幕上的列名即为列名sex) Case搜索函数: CASE WHEN 条件1 THEN 选项1 WHEN 条件2 THE

hubolu123的博客 6万+

UE5垃圾回收优化实战:定位GC卡顿与内存泄漏

垃圾回收(GC)是Unreal Engine 5中保障UObject内存安全的核心机制,其基于引用图的标记-清除原理决定了性能高度依赖引用结构合理性。当GC频繁触发或单次耗时突增,往往映射出蓝图强引用冗余、C++根对象管理失控或资源生命周期设计缺陷等底层问题。技术价值在于降低主线程阻塞、稳定60帧体验、抑制内存异常增长;典型应用场景包括关卡切换卡顿、UI打开后持续GC、打包后内存不释放等。本文聚焦UE5特有的Full GC模式、UObject生命周期约束及GC触发时机不可见性,提供从蓝图变量规范、TSoft

weixin_31995251的博客 362

mysql case when用法

SQL之CASE WHEN用法详解CASE When的用法

pscool的博客 5482

阿里云大模型ACP认证模拟考试(三)

【摘要】:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 3581

全网最全的AItium Designer 16下载资源与安装步骤

Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。...

WQ的博客 1万+

sql语句(case when then else end用法)

Case具有两种格式。简单Case函数和Case搜索函数。  --简单Case函数  CASE sex           WHEN '1' THEN '男'           WHEN '2' THEN '女'  ELSE '其他' END  --Case搜索函数  CASE WHEN sex = '1' THEN '男'           WHEN sex = '2' THEN '女'  ...

踟蹰千年的博客 1万+

升级最新IDEA版本(2022.1.1)

升级最新IDEA版本(2022.1.1)

软件老王 3万+

【数据库】SQL语句之sum(case when then else end)的用法

Sql中的case的用法 Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。 #无法得到‘第二类’这个结果 CASE WHEN name IN( '小明', '小红') THEN '第一类' WHEN name IN ('小红') THEN '第二类' ELSE '其他' END 练习题目 题目1:按月度显示销售额 测试表 #创建月度销售表 CREATE TABLE sales ( year int(10), #年份 month int(10), #月份 amount i

heyiyiya 2万+

第五章-AllData集成DataSophon作为数据平台功能

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。全新会员商业版 X 微信群:https://docs.qq.com/doc/DVHlkSEtvVXVCdEFo

AllDataDC的博客 1638

STM32面试知识点总结分析

通过Boot引脚设定,寻找初始地址初始化栈指针 __initial_sp指向复位程序 Reset_Hander设置异常中断 HardFault_Handler设置系统时钟 SystemInit调用C库函数 _main。

嵌入式技术开发 2513

SQL语句case when then else end用法

在SQL中,CASE WHEN THEN ELSE END是一种条件表达式,用于根据不同的条件执行不同的操作。CASE...END在这个结构中,根据条件的成立与否,系统将选择执行相应的操作。如果所有条件都不成立,系统将执行ELSE后的默认操作。

技术研究中心 1528

C++程序无法正常启动(报0xc000007b错误)问题的详细排查

本文详细介绍了应用程序启动时遇到0xC000007B错误的排查过程。问题源于32位程序与64位运行时库的不匹配,以及缺少依赖的运行时库。通过分析系统日志、使用Windbg和检查程序位数,最终确定问题在于32位程序误引用了64位系统目录下的库文件。

dvlinker的技术专栏 1万+

SQL的case when then else end as语句的用法

现有 学生-分数表 STUDENT_SCORE 如下: 现在想要在sql中根据学生的分数自动判定学生成绩的等级: SELECT NAME, CASE WHEN SCORE < 60 THEN '不及格' WHEN SCORE < 90 THEN '良好' ELSE '优秀' END AS RANK FROM STUDENT_SCORE 结果为: ...

十一月de肖邦 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

sql语句中CASE WHEN THEN ELSE END 常用简单用法

sql语句中CASE WHEN THEN ELSE END 常用简单用法 以下仅供参考,如有错误或不当之处还望大神们告知。 case具有两种格式。简单case函数和case搜索函数。 这两种方式,可以实现相同的功能。简单case函数的写法相对比较简洁,但是和case搜索函数相比,功能方面会有些限制,比如写判定式。 还有一个需要注重的问题,case函数只返回第一个符合条件的值,剩下的case部分将会...

weixin_44090537的博客 411

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

03-009 SQL的case when then else end语句的用法

case函数 case具有两种格式:简单case函数和case搜索函数 简单case函数 case sex when '1' then '男' when '2' then '女' else '其他' end case搜索函数 case when sex = '1' then '男' ...

csdn_immortal的博客 349

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

35、sql语句(case when then else end用法)详细介绍

转载 Case具有两种格式。简单Case函数和Case搜索函数。  ——简单Case函数  CAS...

luluisntlulu的博客 538
上一篇: SQL的左连接 右连接 全连接 内连接 交叉连接
下一篇: sql中查询同一列所有值出现的次数
冷静BB
博客等级 码龄12年 298粉丝 112原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值