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

MySQL中CASE语法规则的详细解析及扩展示例

基础CASE表达式结构

CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_result
END AS alias_name

嵌套COUNT+CASE的特殊用法

COUNT(CASE WHEN condition THEN 1 END)

这种结构相当于其他数据库中的COUNTIF()或SUMIF()函数。

嵌套COUNT+CASE的特殊用法

注:

博客:
霸道流氓气质-CSDN博客

业务使用示例

        SELECTCASEWHEN COUNT(CASE WHEN ar.monitor_indicator = 0 AND ae.event_status = 0 THEN 1 END) = 0 THEN 2 WHEN COUNT(CASE WHEN ar.monitor_indicator = 0 AND ae.event_status = 0 AND mi.is_dispose = 0 THEN 1 END) > 0 THEN 1ELSE 0 END as dataSignalStatus,

逐层解析

外层CASE逻辑

CASE WHEN [条件A] THEN 2 WHEN [条件B] THEN 1 ELSE 0 END

这是一个典型的三态判断结构,优先级从上到下依次判断。

内层COUNT+CASE组合

条件A(判断是否未开启):

COUNT(CASE WHEN ar.monitor_indicator  = 0 AND ae.event_status  = 0 THEN 1 END) = 0

→计算满足"监测指标=0且事件状态=0"的记录数是否为0

条件B(判断是否异常):

COUNT(CASE WHEN ar.monitor_indicator  = 0 AND ae.event_status  = 0 AND mi.is_dispose  = 0 THEN 1 END) > 0

→计算满足"监测指标=0且事件状态=0且未处理"的记录数是否>0

同类语法示例1:学生成绩等级划分

SELECTstudent_name,CASEWHEN COUNT(CASE WHEN score >= 90 THEN 1 END) > 0 THEN 'A'WHEN COUNT(CASE WHEN score >= 60 THEN 1 END) = 0 THEN 'C'ELSE 'B'END AS grade_level
FROM exam_results
GROUP BY student_name;

同类语法示例2:电商订单状态统计

SELECTproduct_id,CASEWHEN COUNT(CASE WHEN status = 'paid' THEN 1 END) = 0 THEN 'no_sales'WHEN COUNT(CASE WHEN status = 'refunded' THEN 1 END) > 3 THEN 'high_refund'ELSE 'normal'END AS sales_status
FROM orders
GROUP BY product_id;

同类语法示例3:设备故障监测

SELECTdevice_id,CASEWHEN COUNT(CASE WHEN sensor_type = 'temp' AND is_active = 1 THEN 1 END) = 0 THEN 2WHEN COUNT(CASE WHEN sensor_type = 'temp' AND is_active = 1 AND is_error = 1 THEN 1 END) > 0 THEN 1ELSE 0END AS temp_status
FROM device_monitoring
GROUP BY device_id;

这种嵌套条件计数的方法在状态监测、分级统计等场景非常实用,能有效减少查询次数,提升性能。


 

http://www.xdnf.cn/news/19990.html

相关文章:

  • Spring Cloud Alibaba快速入门01
  • 去中心化投票系统开发教程
  • Java 双亲委派机制解析和破坏双亲委派的方式
  • sealos部署k8s
  • 华为校招实习留学生机试全攻略:真题目录+算法分类+在线OJ+备考策略
  • 如何将两个网段互相打通
  • Java场景题面试合集
  • 「数据获取」中国科技统计年鉴(1991-2024)Excel
  • 江协科技STM32学习笔记补充之004
  • ETL VS ELT企业应该怎么选择数据集成方式
  • 前缀和和差分思路理解以及典题题解
  • Java面试宝典:Redis的设计、实现
  • Flash Attention vs Paged Attention:大语言模型注意力计算的内存管理革命
  • 【国内电子数据取证厂商龙信科技】IOS 逆向脱壳
  • Milvus快速入门以及用 Java 操作 Milvus
  • PAT 1093 Count PAT‘s
  • [技术革命]Harmonizer:仅20MB模型如何实现8K图像_视频的完美和谐化?
  • 三高项目-缓存设计
  • k8s证书理论知识之/etc/kubernetes/pki/ 和/var/lib/kubelet/pki/的区别
  • 将 PDF 转换为 TIFF 图片:简单有效的 Java 教程
  • 23种设计模式——抽象工厂模式(Abstract Factory Pattern)详解
  • 实战复盘:pnpm Monorepo 中的 Nuxt 依赖地狱——Unhead 升级引发的连锁血案
  • Node.js 18+安装及Claude国内镜像使用、idea中claude插件下载指南
  • MMD动画(二)动作制作
  • Spring线程池ThreadPoolTaskExecutor‌详解
  • 大语言模型的“思考”逻辑:从Token生成到上下文理解的内部流程
  • 我的创作纪念日——《惊变365天》
  • 裸签、Attach、Detach及其验签方式
  • Docker学习笔记(二):镜像与容器管理
  • 基于STM32的智能家居环境监控系统设计