SQL语句中:简单Case函数和Case搜索函数

基于Llama 3搭建中文版(Llama3-Chinese-Chat)大模型对话聊天机器人 前面两篇博文,我们在笔记本部署了Llama 3 8B大模型,使用Ollama搭建了基于Web 可视化对话机器人。在使用过程中,大模型经常出现中文问题英文回答的问题。本博文就用Llama3-Chinese-Chat微调模型来解决这个问题…… 阅读详情

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;

同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。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 )

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


Oracle CASE WHEN 用法介绍

1. CASE WHEN 表达式有两种形式

--简单Case函数  
CASE sex  

WHEN '1' THEN '男'  

WHEN '2' THEN '女'  

ELSE '其他' END  

--Case搜索函数  

CASE

WHEN sex = '1' THEN '男'  

WHEN sex = '2' THEN '女'  

ELSE '其他' END  

2. CASE WHEN 在语句中不同位置的用法

2.1 SELECT CASE WHEN 用法

SELECT   grade, COUNT (CASE WHEN sex = 1 THEN 1      

                       ELSE NULL

                       END) 男生数,

                COUNT (CASE WHEN sex = 2 THEN 1

                       ELSE NULL

                       END) 女生数

    FROM students GROUP BY grade;

2.2 WHERE CASE WHEN 用法

SELECT T2.*, T1.*

   FROM T1, T2

  WHERE (CASE WHEN T2.COMPARE_TYPE = 'A' AND

                   T1.SOME_TYPE LIKE 'NOTHING%'

                THEN 1

              WHEN T2.COMPARE_TYPE != 'A' AND

                   T1.SOME_TYPE NOT LIKE 'NOTHING%'

                THEN 1

              ELSE 0

           END) = 1

2.3 GROUP BY CASE WHEN 用法

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;  

3.关于IF-THEN-ELSE的其他实现

3.1 DECODE() 函数

select decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown')
from   employees;

貌似只有Oracle提供该函数,而且不支持ANSI SQL,语法上也没CASE WHEN清晰,个人不推荐使用。

3.2 在WHERE中特殊实现

SELECT T2.*, T1.*  FROM T1, T2
WHERE (T2.COMPARE_TYPE = 'A' AND T1.SOME_TYPE LIKE 'NOTHING%') OR (T2.COMPARE_TYPE != 'A' AND T1.SOME_TYPE NOT LIKE 'NOTHING%')

这种方法也是在特殊情况下使用,要多注意逻辑,不要弄错。

OpenCV入门(一)Python环境的搭建 因为有点Python基础,并且Python是比较好入门的编程语言,所以,机器视觉后面打算在Python这个平台下进行。 阅读详情

相关推荐

【深度学习】肺结节分割项目实战二:分割肺实质

在后续训练模型的时候如果直接使用原始的肺部CT图像,其中的非肺区域会对训练造成干扰,因此我们需要提取分割肺实质。这一部分参考了kaggle上的教程。 从这张CT图像中可以看出扫描器以外的部分为黑色,背景和肺内部颜色较深,非肺组织和骨头颜色较浅。我们的目的是将肺部分割出来。由于肺部区域和其他部分对比明显,我们可以设置一个合适的阈值对图像中的区域进行隔离。 import argparse import os import numpy as np from medpy.filter.smoothing imp

weixin_42182906的博客 7240

数据库case函数

case函数是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。 可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。 分为: 简单CASE函数 搜索CASE函数

qq_54247497的博客 4968

Ecg信号QRS波峰检测:A Real-Time QRS Detection Algorithm (Pan-Tompkins法)

Pan-Tompkins法是R峰检测的经典方法,被引量高达6000+次。 Pan J, Tompkins W J. A real-time QRS detection algorithm[J]. IEEE transactions on biomedical engineering, 1985 (3): 230-236. 本文对论文流程进行了总结,并参考BioSigKit项目,复现了论文代码。 流程图: 代码如下: 第一部分是信号读入,这里使用MIT_BIH信号的100,读入10000个数据点 第二部分

weixin_42870380的博客 1万+

【MYSQL快速入门】case函数

case函数: 是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。 简单case函数: case 测试表达式 when 简单表达式1 then 结果表达式1 when 简单表达式2 then 结果表达式2.. when 简单表达式3 then 结果表达式n [else 结果表达式n+1] 例:查询班级表中学生的班号,班名,系号和班主任号,并对系号作如下处理: 系号为1时,显示“计算机系”;系号为2时,显示“软件工程系”;系统为3时,显示“物联网系” select 班

_ 3267

DELL服务器BIOS下配置RAID阵列

dell服务器配置raid阵列

weixin_58250887的博客 1万+

JavaScript 书签脚本实战:腾讯/优酷/爱奇艺等5大视频站m3u8链接一键提取

本文详细介绍了如何使用JavaScript书签脚本一键提取腾讯视频、优酷、爱奇艺等五大视频平台的m3u8流媒体链接。通过分析播放器内部对象结构,开发者可以高效获取视频源文件,避免录屏画质损失。文章包含各平台适配方案、实战增强功能开发及企业级解决方案设计,帮助用户快速掌握这一实用技术。

weixin_27945229的博客 595

case函数详解

case函数通常也被称为:流程控制函数 主要有两种形式 简单case函数 通常用于情况不多且可枚举出来的情况 通常形式如下: CASE <col_name> WHEN <value1> THEN <result1> WHEN <value2> THEN <result2> ... ELSE <result> END 例如: CASE sex WHEN '0' THEN '男' WHEN

m0_52390420的博客 1万+

Excel炒股党必备:手把手教你用Power Query免费获取并刷新股票历史数据

本文详细介绍了如何利用Excel中的Power Query工具免费获取并自动刷新股票历史数据,特别适合Excel炒股党。从环境配置、数据源选择到实战操作,手把手教你建立智能数据管道,实现高效投资分析。通过参数化股票代码和定时刷新功能,大幅提升数据更新效率。

weixin_26767391的博客 654

C语言的switch case函数

所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;如果“整型数值1”和 m 不相等,就跳过冒号后面的“语句1”,继续比较第二个 case、第三个 case……从第一个 case 开始,比较“整型数值1”和 m,如果它们相等,就执行冒号后面的所有语句,也就是从“语句1”一直执行到“语句n+1”,而不管后面的 case 是否匹配成功。如果直到最后一个“整型数值n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”

AnChenliang_1002的博客 3万+

LD分析实战:基于Plink和R的连锁不平衡计算与可视化全流程

本文详细介绍了基于Plink和R的连锁不平衡(LD)分析全流程,包括基因型数据预处理、LD计算参数设置及结果可视化技巧。通过实战案例解析PLINK文件格式转换、r²值计算关键参数,并展示如何使用ggplot2绘制高质量LD热图,帮助研究人员高效完成基因组关联分析。

weixin_29074295的博客 319

C# + YOLO 实时摄像头检测:Emgu CV + ONNX Runtime,30FPS+ 流畅运行

很多教程只给“单张图片推理”代码,一上摄像头就卡成 PPT(<5 FPS)。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 214

Sql case函数

sql case函数

皮卡丘的情绪 5218

AI Agent Harness内容审核:生成内容合规

在过去的几年里,生成式人工智能(Generative AI)技术取得了爆炸性的发展。从 GPT-4、Claude 这样的文本生成模型,到 Midjourney、Stable Diffusion 这样的图像生成工具,再到 Sora 这样的视频生成模型,AI 已经具备了媲美甚至超越人类的内容创作能力。然而,技术是一把双刃剑。随着生成式 AI 的普及,内容安全与合规风险也呈指数级增长。

AI架构师小马 300

SQL语句中 Case具有两种格式:简单Case函数和Case搜索函数

转自:http://blog.youkuaiyun.com/IBM_hoojo/article/details/5546868 Case具有两种格式。简单Case函数和Case搜索函数。  --简单Case函数 CASE sex          WHEN '1' THEN '男'          WHEN '2' THEN '女' ELSE '其他' END --Case

iCoding91 4288

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

mysql能用case嵌套sql吗,关于sqlserver中查询语句中嵌套case语句使用方法

ryxxlong的博客 Sql server 中的 CASE 语句文章, 链接 http://ryxxlong.iteye.com/blog/531221 写的比较详细,具体内容如下,主要用于自己以后方便查询 CASE 具有两种式: Simple CASE function: CASE input_expression WHEN when_expression THEN result_exryxx...

weixin_35436076的博客 506

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Sql server 中的 CASE 语句

CASE 具有两种格式: Simple CASE function: CASE input_expression      WHEN when_expression THEN result_expression     [ ...n ]      [     ELSE else_result_expression      ] END Searched...

xx510long的博客 761

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

db2case语句_DB2 SQL语句笔记

1、CASE WHEN语句SQL中的CASE WHEN使用,Case具有两种格式:简单Case函数和Case搜索函数。--简单Case函数CASE sexWHEN '1' THEN '男'WHEN '2' THEN '女'ELSE '其他'END--Case搜索函数CASEWHEN sex = '1' THEN '男'WHEN sex = '2' THEN '女'ELSE '其他'END这两种方式...

weixin_31558841的博客 1171

MYSQL when case的用法和行转列的实现

一 when case 的用法 1.简单函数CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END 现在有如上的表,想要自定义每个人物使用的武器,可以使用如下的语句 select 人物"英雄",case 人物 when "诸葛亮" then "扇子" when "吕布" then "方天画戟" else"不使用武器" end"使用的武器" from sanguo ...

weixin_43218601的博客 3724

【SQL】CASE WHEN语句

本文为个人学习笔记,材料取自leetcode CASE WHEN语句可用于流程控制。 CASE有两种格式:简单CASE与CASE搜索函数 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' ...

ax478的博客 340

sql语句if拼接oracle,oraclesql语句ifthen

在oracle sql语句里有没有iforacle 中if ..else 可以再pl/sql 中使用,如果是要在SQL语句中达到这种效果可以用case when 。then 。else ..end;mysql数据库中CASE WHEN语句。case when语句,用于计算条件列表并返回多个可能结果表达式之一。CASE 具有两种格式:简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果...

weixin_27869497的博客 1051

SQL中CASE语句的用法详解与实例

SQL中的CASE语句是一种条件表达式,它允许在查询中实现if-then-else的逻辑。它能够根据特定条件对数据进行转换、分类或计算,是数据筛选和结果集格式化的重要工具。CASE语句不修改底层数据,仅改变查询结果的呈现方式。它可以在SELECT、UPDATE、INSERT、DELETE以及ORDER BY等子句中使用,极大地增强了SQL查询的灵活性和表现力。

qw940423的博客 535

mysql中求闰年的函数_MS SQL判断闰年的语句

我们可通过如下的两种语句来判断是否为闰年:①代码SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then ''平年'' else ''闰年'' end②代码select case datediff(day,datename(year,getdate())...

weixin_39688875的博客 1389

CASE函数分支条件

Mysql使用CASE语句,进行条件筛选

愿你我都能实现自己的梦想 786

Case When Then End

前言: CASE语句具有两种格式。1、简单CASE函数 2、CASE搜索函数。 场景: SQL中使用增加一些判断呢???当然使用Case When Then End啦; 例子: 1、举个万年不变学生的问题。有张student表。字段:id、name、sex(0:男 1:女)、grade(成绩)查询男学生大于80分女学生大于90的学生名单 CASE搜索函数: SELECT * FRO...

致终将逝去的编程青春 5646

SQL中case when 总结

SQL 中case when 总结 简单的梳理一下case when 的用法 - 简单Case函数 - Case搜索函数 简单case 函数语法 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl + Q 插入链接 Ctrl + L 插入代码 Ctrl + K 插入图片 Ctrl + G 提升标题 Ctrl + H 有序列表...

终将成为大牛 1458

SQL中case when then 用法

case的使用格式:------简单case函数 CASE sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未知' END------case搜索函数: CASE WHEN sex=1 THEN '男' WHEN sex=2 THEN '女' ELSE '未知' END PS:case判断语句只要满足符合条件

jingYang07的博客 824
上一篇: Oracle中的decode的使用
下一篇: Oracle PL/SQL中使用%TYPE和%ROWTYPE的区别
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值