SQL CASE 语句

在SQL中的 `CASE` 语句是一种条件表达式,它允许你在查询中根据条件逻辑返回不同的值。`CASE` 语句通常有两种形式:简单 `CASE` 表达式和搜索 `CASE` 表达式。在我之前给出的优化SQL查询的例子中,使用了简单 `CASE` 表达式。

这里是简单 `CASE` 表达式的基本语法:

CASE WHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_resultEND

在上述优化的SQL查询中,`CASE` 语句用于对 `test` 表中每行的 `type` 字段进行评估,并根据 `type` 的值返回1或不返回任何值(即返回NULL)。具体来说:

COUNT(CASE WHEN a.type = '2' THEN 1 END)

这里的意思是:

- `WHEN a.type = '2'`:这是一个条件,检查 `type` 字段是否等于 `'2'`。

- `THEN 1`:如果上面的条件为真,则表达式返回1。

- `END`:标志着 `CASE` 表达式的结束。

因此,整个 `CASE` 表达式的作用是计数 `type` 字段值为 `'2'` 的行数。由于 `CASE` 表达式返回的是1或NULL,所以 `COUNT` 函数实际上统计的是返回1的行数,即 `type` 字段值为 `'2'` 的行数。

同样的逻辑可以应用于其他 `test` 值:

COUNT(CASE WHEN a.type = '3' THEN 1 END) AS 'test2',COUNT(CASE WHEN a.type = '1' THEN 1 END) AS 'test3',COUNT(CASE WHEN a.type = '4' THEN 1 END) AS 'test4',COUNT(CASE WHEN a.type = '5' THEN 1 END) AS 'test5'

这样,我们就可以避免执行多个子查询,而是使用单个查询和条件计数来获取每种类型的计数。

SELECTCOUNT(CASE WHEN a.type = '2' THEN 1 END) AS 'test1',COUNT(CASE WHEN a.type = '3' THEN 1 END) AS 'test2',COUNT(CASE WHEN a.type = '1' THEN 1 END) AS 'test3',COUNT(CASE WHEN a.type = '4' THEN 1 END) AS 'test4',COUNT(CASE WHEN a.type = '5' THEN 1 END) AS 'test5'FROMtestWHEREa.date = '20240421';

这个查询使用 `CASE` 语句在 `SELECT` 列表中为每种 `type` 创建一个计数,并且只扫描一次表 `test`。这通常比多个子查询更加高效,特别是当表中的数据量很大时。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百面算法工程师 | 分类和聚类

目录 6.1 为什么正确率有时不能有效评估分类算法? 6.2 什么样的分类器最好? 6.3 什么是聚类,你知道哪些聚类算法? 6.4 K-Means聚类算法如何调优? 6.5 K-Means聚类算法如何选择初始点? 6.6 K-Means聚类聚的是特征还是样本 …

反编译jar包

1. 复制java-compiler.jar /Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar 2.执行命令 java -cp java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler app.jar app app.jar是要反编译的jar…

微服务架构中的分库分表设计

在微服务架构中,分库分表设计是优化数据存储和查询性能的重要手段。通过合理的分库分表策略,可以提高系统的可扩展性、灵活性和响应速度。以下是关于微服务架构中分库分表设计的详细分析。 1. 概要设计 1.1 分库设计 1.1.1 垂直切分 (1&a…

const loading = ref(true)中loading 是常亮还是变量

在Vue 3中使用Composition API时,当你声明 const loading ref(true),loading 是一个响应式的引用(reactive reference),而不是一个常规的JavaScript变量。 这里的ref函数是Vue提供的,用来创建一个响应式的…

【面试经典 150 | 链表】删除链表的倒数第 N 个结点

文章目录 写在前面Tag题目来源解题思路方法一:统计节点个数方法二:双指针 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本…

向媒体投稿有了好方法财政单位信息宣传工作简单又轻松

当我初涉财政单位的信息宣传岗位,肩负起对外展示单位风采、传播政策信息的重要职责时,我深刻体验到了投稿之路的艰辛曲折。初期,对于如何有效对接媒体并成功发表稿件,我感到一片茫然,仿佛置身于浩瀚的信息海洋中,无从下手。 那时,我的工作日常就是广泛搜集各类媒体的联系方式,特…

{“errMsg“:“insertXWebCamera:fail appid privacy api banned“}

问题描述:微信小程序,在体验版本测试时,调用摄像头OK,没有任何问题,部署发布版本后,日志报错内容:{"errMsg":"insertXWebCamera:fail appid privacy api banned"}&#xff…

CountDownLatch倒计时器源码解读与使用

🏷️个人主页:牵着猫散步的鼠鼠 🏷️系列专栏:Java全栈-专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 目录 1. 前言 2. CountDownLatch有什么用 3. CountDownLatch底层原理 3.1. count…

代理设置方法 ubuntu git

目录 ubuntu设置代理方法 git 中 ubuntu设置代理方法 (1) .bashrc中写 或者 (2) 当自己的 虚拟机选择default switch,保持了虚拟机与本机的联通性(host模式好像),这时&#xff0…

嵌入式学习——C语言基础——day6

1. 一维数组的定义 相同类型有限数据的一个集合 数据类型 数组名[元素个数]; 注意: 1. 数组中的元素必须为同一类型 2. 元素个数有限个 3. 数组定义时,元素个数必须为常量或者常量表达式,不能为变量 2. 数组元素的访问 数组名[元素下标] 元素…

阿里通义千问Qwen-7B-Chat大模型简介

阿里通义千问Qwen-7B-Chat是由阿里云研发的一系列大语言模型中的一个,属于通义千问大模型系列。这个模型具有70亿参数规模,是基于Transformer架构构建的,专门为理解和生成人类语言而设计。Qwen-7B-Chat在超大规模的预训练数据集上进行训练&am…

深度剖析图像处理—边缘检测

什么是边缘检测 边缘检测(Edge Detection)就是提取图像中的边缘点(Edge Point)。边缘点是与周围像素相比灰度值有阶跃变化或屋顶状变化的像素。边缘常存在于目标与背景之间、目标与目标之间、目标与其影子之间。 ​ 在图像处理和图像分析中,经常要用到边缘(Edge)、边…

【Git】生成patch和应用patch

生成patch 将本地所有修改打成补丁 git diff > /tmp/xxx.patch将本地对某个文件的修改打成补丁 git diff test/1.txt > /tmp/1.patch将某一次提交的修改内容打成补丁 -1表示只为单个提交创建patch,-o表示输出patch的文件夹路径,默认是用提交的…

D咖饮品机器人惊艳亮相:智能硬件改变生活习惯

在当今快节奏的生活中,人们对于便捷、高效的需求日益增长,智能硬件应运而生,其中饮品机器人作为一种新型的智能设备,正在以惊艳的姿态亮相于人们的生活中,为人们带来了全新的消费体验,改变着大众的生活习惯…

node-sass安装失败解决

老项目安装node-sass4.14.1一直失败 "node-sass": "^4.14.1",报错环境变量Path 中没有 python2.7 gyp verb check python checking for Python executable "python2.7" in the PATH安装python2.7,然后设置npm config set python C:\Python27 …

vulfocus的使用

vulfocus的使用 1.拉取镜像 docker pull vulfocus/vulfocus:latest 2.运行 docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP192.168.0.105 vulfocus/vulfocus 3.访问 用户名:admin 密码:admin

【机器学习】特征筛选实例与代码详解

机器学习中的特征筛选 一、特征筛选的重要性与基本概念二、特征筛选的方法与实践1. 基于统计的特征筛选2. 基于模型的特征筛选3. 嵌入式特征筛选 三、总结与展望 在机器学习领域,特征筛选作为预处理步骤,对于提高模型性能、简化模型结构以及增强模型解释…

街道社区信息宣传工作做的好这个投稿方法不能少

作为一名刚刚接手街道社区信息宣传工作的新人,伊始对于如何有效地向各大媒体平台投稿我可谓是一头雾水。那时的日子充满了曲折与挑战,每一步都似乎布满了荆棘。为了让更多居民了解社区的工作动态和服务亮点,我怀揣着满腔热情,着手撰写一篇篇生动详实的新闻稿件。然而,投稿的过程…

SpringAOP从入门到源码分析大全(三)ProxyFactory源码分析

文章目录 系列文档索引五、ProxyFactory源码分析1、案例2、认识TargetSource(1)何时用到TargetSource(2)Lazy的原理(3)应用TargetSource 3、ProxyFactory选择cglib或jdk动态代理原理4、jdk代理获取代理方法…

算法导论 总结索引 | 第三部分 第十一章:散列表

1、动态集合结构,它至少要支持 INSERT、SEARCH 和 DELETE字典操作 散列表 是实现字典操作的 一种有效的数据结构。尽管 最坏情况下,散列表中 查找一个元素的时间 与链表中 查找的时间相同,达到了 Θ(n)。在实际应用中,散列表的性…