当前位置: 首页 > news >正文

CASE WHEN函数语句多条件下使用详解

目录

CASE 的两种格式: 简单CASE函数 和 CASE搜索函数

同时配合 SUM 以及 COUNT 方法的使用

① SUM函数

② COUNT函数


CASE WHEN函数语句,实现简单CASE函数和CASE搜索函数两种格式。
同时配合 SUM以及COUNT方法的使用

CASE 的两种格式: 简单CASE函数 和 CASE搜索函数

**简单CASE函数**
CASE 条件参数名称WHEN 参数值1 THEN '显示值1'WHEN 参数值2 THEN '显示值2'...
ELSE '显示其他值' END
**CASE搜索函数**
CASE WHEN 条件参数名称 = '参数值1' THEN '显示值1'WHEN 条件参数名称 = '参数值2' THEN '显示值2'...
ELSE '显示其他值' END

两种格式示例:
状态:state
订单号:orderId

**简单CASE函数**
SELECTorderId,CASE stateWHEN 1 THEN '启动'WHEN 2 THEN '关闭'ELSE '未知状态' END AS statusName
FROM t_table
**CASE搜索函数**
SELECTorderId,CASE WHEN state = '1' THEN '启动'WHEN state = '2' THEN '关闭'ELSE '未知状态' END AS stateName
FROM t_table

这两种格式,可以实现相同的功能。但是简单CASE函数和CASE搜索函数相比,功能方面会有些限制;

比如写判断式

SELECTorderId,CASE WHEN state = '1' THEN '启动'WHEN state = '2' THEN '关闭'WHEN state IN ('3', '4') THEN '待解锁'ELSE '未知状态' END AS stateName
FROM t_table

若是多重时,WHEN 的 IN 条件中的值和下一个 WHEN 的条件重合会被忽略,如下面的 “关闭” 状态会被忽略,永远无法得到 “关闭”

SELECTorderId,CASE WHEN state = '1' THEN '启动'WHEN state IN ('2', '3', '4') THEN '待解锁'WHEN state = '2' THEN '关闭'ELSE '未知状态' END AS stateName
FROM t_table

同时配合 SUM 以及 COUNT 方法的使用

① SUM函数

**简单CASE函数**
SUM(CASE 条件参数名称WHEN 参数值 THEN '显示被求和值'ELSE 0 END) AS SUMAMT**CASE搜索函数**
SUM(CASE WHEN 条件参数名称 = '参数值' THEN '显示被求和值'ELSE 0 END) AS SUMAMT**或者**	
SUM(CASE WHEN 条件参数名称1 = '参数值1' AND 条件参数名称2 = '参数值2' ...THEN '显示被求和值'ELSE 0 END) AS SUMAMT**或者**	
SUM(CASE WHEN 条件参数名称1 IN ('参数值n') AND 条件参数名称2 = '参数值2' ...THEN '显示被求和值'ELSE 0 END) AS SUMAMT

示例: 根据时间条件查询值,有值时显示 “被求和值”, 没有值时,显示 “null”
状态:state
类型:t_type
金额:amt

**简单CASE函数**
SELECTSUM(CASE stateWHEN 1 THEN amtELSE 0 END ) AS sumAmt
FROM t_table
WHEREcore_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time**CASE搜索函数**
SELECTSUM(CASE WHEN state = '1' THEN amtELSE 0 END ) AS sumAmt
FROM t_table
WHEREcore_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time**或者**
SELECTSUM(CASE WHEN state = '1' AND t_type = '2' THEN amtELSE 0 END ) AS sumAmt
FROM t_table
WHEREcore_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time**或者**
SELECTSUM(CASE WHEN state IN ('2', '3', '4') AND t_type = '2' THEN amtELSE 0 END ) AS sumAmt
FROM t_table
WHEREcore_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time

COUNT函数

**简单CASE函数**
COUNT(CASE 条件参数名称WHEN 参数值 THEN 1ELSE 0 END) AS COUNTAMT**CASE搜索函数**
COUNT(CASE WHEN 条件参数名称 = '参数值' THEN 1ELSE 0 END) AS COUNTAMT**或者**	
COUNT(CASE WHEN 条件参数名称1 = '参数值1' AND 条件参数名称2 = '参数值2' ...THEN 1ELSE 0 END) AS COUNTAMT**或者**	
COUNT(CASE WHEN 条件参数名称1 IN ('参数值n') AND 条件参数名称2 = '参数值2' ...THEN 1ELSE 0 END) AS COUNTAMT

示例: 根据时间条件查询值,有值时显示 “总条数值”, 没有值时,显示 “0”
状态:state
类型:t_type
金额:amt

**简单CASE函数**
SELECTCOUNT(CASE stateWHEN 1 THEN 1ELSE 0 END ) AS countAmt
FROM t_table
WHEREcore_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time**CASE搜索函数**
SELECTCOUNT(CASE WHEN state = '1' THEN 1ELSE 0 END ) AS countAmt
FROM t_table
WHEREcore_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time**或者**
SELECTCOUNT(CASE WHEN state = '1' AND t_type = '2' THEN 1ELSE 0 END ) AS countAmt
FROM t_table
WHEREcore_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time**或者**
SELECTCOUNT(CASE WHEN state IN ('2', '3', '4') AND t_type = '2' THEN 1ELSE 0 END ) AS countAmt
FROM t_table
WHEREcore_time >= '2020-07-01 00:00:00'
AND core_time <= '2020-07-20 23:59:59'
GROUP BY core_time

嘟嘟噜~

原文作者:Explorer_S 

相关文章:

CASE WHEN函数语句多条件下使用详解

目录 CASE 的两种格式&#xff1a; 简单CASE函数 和 CASE搜索函数 同时配合 SUM 以及 COUNT 方法的使用 ① SUM函数 ② COUNT函数 CASE WHEN函数语句&#xff0c;实现简单CASE函数和CASE搜索函数两种格式。同时配合 SUM以及COUNT方法的使用 CASE 的两种格式&#xff1a; 简…...

2.31、守护进程(2)

2.31、守护进程&#xff08;2&#xff09;1.守护进程的创建步骤2.什么情况下子进程不会继承父进程的组ID3.哪些操作会导致子进程的组ID发生改变4.kill怎么杀掉守护进程的实现守护进程1.守护进程的创建步骤 执行一个 fork()&#xff0c;之后父进程退出&#xff0c;子进程继续执…...

记录上传文件异常 /tmp/tomcat... (No space left on device)

一&#xff0c;问题描述 用postman调用上传接口&#xff0c;基本每两次调用会有一次报错&#xff0c;如下 {"timestamp": "2023-04-11T03:00:15.4690000","status": 500,"error": "Internal Server Error","exceptio…...

无向连通图中长度为 n 的循环

给定一个无向连通图和一个数字 n,计算图中长度为 n 的循环总数。长度为 n 的圈简单地表示该圈包含 n 个顶点和 n 条边。我们必须计算所有存在的此类循环。 示例: 输入:n = 4 输出:总周期数 = 3 解释 :遵循 3 个独特的循环0 -> 1 -> 2 -> 3 -> 0 0 -> 1 …...

打造出ChatGPT的,是怎样一群人?

震惊世界的ChatGPT&#xff0c;要多少人才能开发出来&#xff1f;几百&#xff0c;还是几千&#xff1f; 答案是&#xff1a;87个人。 老实说&#xff0c;刚看到这个数字真是惊到我了&#xff0c;印象里&#xff0c;之前看媒体报道各大巨头人工智能人才储备时&#xff0c;动辄…...

数据结构——栈与队列相关题目

数据结构——栈与队列相关题目232. 用栈实现队列思路225. 用队列实现栈1.两个队列实现栈2.一个队列实现栈20. 有效的括号思路1047. 删除字符串中的所有相邻重复项思路155. 最小栈150. 逆波兰表达式求值思路239. 滑动窗口最大值单调队列347. 前 K 个高频元素思路232. 用栈实现队…...

Redhat6.7离线安装rabbitmq

一、下载资源文件&#xff08;.rpm文件&#xff09; 链接: https://pan.baidu.com/s/1j2Ze_Jjm0oMrP-r95PPCtA?pwdv3is 提取码: v3is 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 创建rabbit文件夹Mkdir rabbit 三、通过ftp上传文件 四、安装erlang环境 …...

EasyCVR平台基于GB28181协议的语音对讲配置操作教程

EasyCVR基于云边端协同&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台可支持海量视频的轻量化接入与汇聚管理&#xff0c;可提供视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、平台级联等功能…...

谷歌发布Self-Debug方法,让大模型学会自己修bug,一次性生成正确代码

文 | 智商掉了一地你有没有想过&#xff0c;让一台计算机诊断和修复自己生成的错误代码&#xff1f;一篇最新的研究论文介绍了一种名为 Self-Debugging 的技术&#xff0c;通过在生成的代码中添加自解释的信息&#xff0c;让计算机像一个可以自己修复代码的程序员一样调试自己的…...

行为型模式-模板方法

行为型模式-模板方法 模板方法(Template Method)解决算法框架问题描述适用环境优点:缺点:违反原则:代码实现模板方法(Template Method) 解决算法框架问题 描述 定义了一个算法的骨架,并将某些步骤延迟到子类中进行实现,从而使得算法的具体实现能够在子类中自由变化…...

正则表达式识别日期

正则表达式识别日期 正则表达式识别各种格式的日期 import redef extract_dates(text):# 正则表达式&#xff0c;用于识别常见的日期格式date_pattern r"""(?P<date>(?P<year_only>\d{4}(?![\d年]))| # …...

如何设计一个秒杀架构设计?

文章目录 1. 秒杀业务的特点2. 总体思路2.1 削峰限流安全保护页面优化,动静分离异步处理热点分离2.2 Nginx的设计细节2.3 页面优化细节降低交互的压力安全控制2.4 Redis集群的应用分布式悲观锁(参考redis悲观锁的代码)异步处理订单2.5 消息队列限流2.6 数据库设计2.7 答题验…...

Elasticsearch:配置选项

Elasticsearch 带有大量的设置和配置&#xff0c;甚至可能让专家工程师感到困惑。 尽管它使用约定优于配置范例并且大部分时间使用默认值&#xff0c;但在将应用程序投入生产之前自定义配置是必不可少的。 在这里&#xff0c;我们将介绍属于不同类别的一些属性&#xff0c;并讨…...

消息中间件Kafka分布式数据处理平台+ZooKeeper

目录 一.消息队列基本介绍 1.为什么需要消息队列&#xff08;MQ&#xff09; 2.使用消息队列的好处 2.1 解耦 2.2 可恢复性 2.3 缓冲 2.4 灵活性 & 峰值处理能力 2.5 异步通信 3.消息队列的两种模式 3.1 点对点模式 3.2 发布/订阅模式 二.Kafka基本介绍 1.Kaf…...

Linux 用户文件磁盘网络进程指令

用户相关指令 useradd 用户名添加用户useradd -g 组名 用户名 向组添加用户passwd 用户名 设置密码id 用户名 查看用户名的具体信息cat /etc/passwd 查看创建了哪些用户su 用户名 切换用户名&#xff08;不能获得环境变量&#xff09;su - 用户名获得环境变量以及执行权…...

如何使用Socks5代理IP提高网络安全性

随着网络的快速发展&#xff0c;网络安全问题变得越来越重要。为了保障网络安全&#xff0c;人们普遍使用代理IP&#xff0c;其中Socks5代理IP是一种常用的选择。本文将介绍什么是Socks5代理IP&#xff0c;以及如何使用它提高网络安全性。 一、什么是Socks5代理IP Socks5代…...

《Java8实战》第3章 Lambda 表达式

利用行为参数化来传递代码有助于应对不断变化的需求。它允许你定义一段代码块来表示一个行为&#xff0c;然后传递它。采用匿名类来表示多种行为并不令人满意&#xff1a;代码十分啰唆&#xff0c;这会影响程序员在实践中使用行为参数化的积极性。 3.1 Lambda 管中窥豹 可以…...

开放式耳机的颠覆之作!南卡OE Pro新皇降临!佩戴和音质双重突破

千呼万唤的南卡OE Pro终于要在最近正式官宣上线&#xff0c;此消息一经放出&#xff0c;蓝牙耳机市场就已经沸腾。NANK南卡品牌作为国内的音频大牌&#xff0c;发展和潜力一直备受业内关注&#xff0c;这次要上线的南卡OE Pro更是南卡十余年来积累的声学技术结晶之一。 据透露…...

生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]

文章目录概念相关图示代码示例框架中的应用场景多个生成器&#xff08;Concrete Builder&#xff09;&#xff1a;单个生成器概念 生成器设计模式&#xff08;Builder Design Pattern&#xff09;是一种创建型设计模式&#xff0c;用于处理具有多个属性和复杂构造过程的对象。生…...

JUC并发工具

JUC并发工具 一、CountDownLatch应用&源码分析 1.1 CountDownLatch介绍 CountDownLatch就是JUC包下的一个工具,整个工具最核心的功能就是计数器。 如果有三个业务需要并行处理,并且需要知道三个业务全部都处理完毕了。 需要一个并发安全的计数器来操作。 CountDown…...

大模型涌现能力:从原理到工程实践的激发与评测方法

1. 项目概述&#xff1a;从“玄学”到“可操作”的涌现能力拆解最近和几个做模型训练和评测的朋友聊天&#xff0c;话题总绕不开“涌现能力”。这个词现在火得不行&#xff0c;但聊深了发现&#xff0c;大家对这个概念的理解其实挺割裂的。有人说它是大模型“开窍”的瞬间&…...

从DFT计算到论文插图:一条龙搞定Pt(111)表面吸附模型的构建与可视化

从DFT计算到论文插图&#xff1a;Pt(111)表面吸附模型的完整构建与可视化指南 在计算材料科学领域&#xff0c;构建精确的表面吸附模型是研究催化反应机理、表面化学过程的第一步。对于刚入门的研究者来说&#xff0c;如何快速构建一个符合物理实际的Pt(111)表面吸附模型&#…...

避坑指南:QGraphicsView自适应缩放时,为什么你的Item总对不齐或留白?

避坑指南&#xff1a;QGraphicsView自适应缩放时Item对齐与留白问题深度解析 在Qt图形界面开发中&#xff0c;QGraphicsView框架因其强大的2D显示能力被广泛应用。但当开发者尝试实现视图内容的自适应缩放时&#xff0c;经常会遇到一个令人头疼的问题——调用fitInView后&#…...

从开发板到自研板:RK3568设备树移植与定制编译实战

1. RK3568设备树移植入门指南 第一次接触RK3568设备树移植的工程师&#xff0c;往往会被dts文件中密密麻麻的节点和属性搞得晕头转向。我刚开始做这块的时候&#xff0c;光是看那7000多行的代码就头疼。但其实只要掌握几个关键点&#xff0c;移植工作就会变得清晰很多。 设备树…...

ssh 使用问题汇总

本文深入探讨SSH连接失败、密钥管理、权限设置等常见难题&#xff0c;并提供详细的解决方案。通过本文&#xff0c;您将能够轻松应对SSH使用过程中遇到的各类问题&#xff0c;提升SSH操作效率&#xff0c;保障远程连接的安全性。 1. Connection reset by peer 现象 ssh到ser…...

Arm Neoverse CMN-650架构与性能优化解析

1. Arm Neoverse CMN-650架构概览在现代多核处理器系统中&#xff0c;一致性互连网络扮演着至关重要的角色。作为Arm Neoverse平台的核心组件&#xff0c;CMN-650采用Mesh拓扑结构设计&#xff0c;为多核处理器集群提供高效的数据传输和缓存一致性管理。这种架构特别适合需要高…...

保姆级教程:手把手教你用‘版本降级法’搞定PyTorch 1.9.1 + CUDA 11.1环境搭建

深度学习环境搭建实战&#xff1a;PyTorch与CUDA版本兼容性终极指南 引言 当你第一次尝试在Windows系统上搭建PyTorch深度学习环境时&#xff0c;可能会遇到各种令人困惑的错误信息。其中最常见的就是"no matching distribution found"这类版本兼容性问题。本文将以一…...

Sunshine游戏串流终极指南:5步搭建你的私人云游戏服务器

Sunshine游戏串流终极指南&#xff1a;5步搭建你的私人云游戏服务器 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款功能强大的开源游戏串流服务器&#xff0c;专为…...

嵌入式TFT屏幕LVGL驱动适配:从硬件抽象到性能优化的全流程实践

1. 项目概述与核心价值最近在几个嵌入式显示项目里&#xff0c;我深度折腾了TFT屏幕与LVGL的适配工作。这活儿听起来像是把两个现成的轮子装到一起&#xff0c;但真上手了才发现&#xff0c;从点亮屏幕到丝滑流畅的UI交互&#xff0c;中间隔着不少“坑”。如果你也在为STM32、E…...

从0到1搭建AI心理健康预警系统:我是如何用BERT+BiLSTM捕捉情绪拐点的

一、 痛点&#xff1a;为什么通用大模型干不了这活&#xff1f;首先声明&#xff0c;我们不是大模型黑。但在心理预警这个场景下&#xff0c;直接用GPT-4或者文心一言的API&#xff0c;有三个致命伤&#xff1a;成本炸裂&#xff1a;​ 每天几万条的学生/员工咨询日志&#xff…...