详解SQL之CASE WHEN具体用法

yizhihongxing

详解SQL之CASE WHEN具体用法

简介

CASE WHEN 是 SQL 中的条件表达式,可以根据不同的条件进行不同的处理,常用于数据转换、分类统计等场景。

通常的形式如下:

CASE WHEN condition1 THEN result1
     WHEN condition2 THEN result2
     ...
     ELSE default_result
END

其中,condition1condition2 等为条件表达式,result1result2 等为满足相应条件时的结果,default_result 为条件都不满足时的默认结果。

示例1:数据转换

假设有一个订单表 orders,其中有一列 status 用于记录订单的状态,取值为 1、2、3 三个数字,分别代表“待支付”、“已支付”、“已完成”三种状态。现在需要将其转换为文字描述,即将 1 转换成“待支付”,2 转换成“已支付”,3 转换成“已完成”。

SELECT id, 
       CASE 
           WHEN status = 1 THEN '待支付'
           WHEN status = 2 THEN '已支付'
           WHEN status = 3 THEN '已完成'
           ELSE '未知状态'
       END AS status_desc
FROM orders

上述 SQL 语句中,通过 CASE WHEN 表达式判断 status 值,根据不同的取值转换为对应的文字描述。当 status 值既不是 1、2、3 中的任何一个时,使用 ELSE 子句指定为“未知状态”。

示例2:分类统计

假设有一个学生表 students,其中有两列 genderscore,分别用于记录学生的性别和分数。现在需要按照不同的性别统计男生和女生的个数,并将总分数和平均分分别计算出来。

SELECT gender, 
       COUNT(*) AS count, 
       SUM(score) AS sum_score,
       AVG(score) AS avg_score
FROM students
GROUP BY gender

上述 SQL 语句中,通过 COUNTSUMAVG 等聚合函数对学生表进行统计。但是,如果需要将男生和女生分别统计,可以使用 CASE WHEN 表达式进行分类处理。

SELECT CASE gender 
           WHEN 'M' THEN '男'
           WHEN 'F' THEN '女'
           ELSE '未知性别'
       END AS gender_desc,
       COUNT(*) AS count, 
       SUM(score) AS sum_score,
       AVG(score) AS avg_score
FROM students
GROUP BY gender_desc

上述 SQL 语句中,对 gender 列进行了转换,将 'M' 转换成了 '男',将 'F' 转换成了 '女',同时还使用了 GROUP BY 子句按照分类后的 gender_desc 进行分组统计。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解SQL之CASE WHEN具体用法 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • Java源码解析之object类

    Java源码解析之Object类 Object类是Java中非常重要的一个类,它是所有Java类的顶级父类,所有Java类都直接或间接地继承自它。因此,深入了解Object类,可以对于我们更好地理解Java的继承机制和对象模型有所帮助。本篇文章将详细讲解Object类的各个方法及其实现原理。 toString()方法 Object类中最常用的方法之一就是to…

    database 2023年5月21日
    00
  • 常用SQL语句(嵌套子查询/随机等等)详细整理

    常用SQL语句详细整理 嵌套子查询 嵌套子查询是指在一个SQL查询中嵌套另一个SQL查询,通常用于获取更为准确的结果或进行复杂的数据统计分析。嵌套子查询可以嵌套多层。 示例1:查询存在于子查询中的数据 SELECT * FROM table1 WHERE id IN (SELECT id FROM table2 WHERE field2=’value’); …

    database 2023年5月21日
    00
  • SQL Server中的SQL语句优化与效率问题

    SQL Server中的SQL语句优化与效率问题是数据库应用开发人员和管理员必须要面对并解决的问题。以下是一些SQL语句性能优化的技巧和建议: 1. 确保索引优化 索引是提高SQL查询性能最有效的方式之一。确保查询中使用的列都已创建索引。但要注意不要过度索引,否则可能会降低性能。 下面是创建索引的语法示例: CREATE INDEX index_name O…

    database 2023年5月19日
    00
  • MySQL注入中导出字段内容的研究通过注入导出WebShell

    MySQL注入是指攻击者通过可写的输入源突破Web应用程序,从而访问或修改与该应用程序或其数据库相关的数据。其中,导出字段内容是一种常用的攻击方式,攻击者可以利用注入漏洞获取站点的敏感信息。以下是使用注入导出字段内容的研究及攻略: 攻略概述 找到目标站点; 判断目标站点是否存在注入点; 获取目标站点注入点所在位置; 利用注入点获取站点数据库信息; 通过注入获…

    database 2023年5月22日
    00
  • Linux高级篇学习手册(二)

    针对题目中提到的Linux高级篇学习手册(二),我将提供一个完整的学习攻略,帮助Linux爱好者更好地学习和掌握该书的内容。 一、准备工作 在开始之前,我们需要做以下准备工作。 1.1 确认学习环境 首先,需要确认自己的学习环境是否已经具备。比如,我们需要安装好Linux操作系统,对Linux基础知识已经有基本的了解。 1.2 确认学习时间 确定自己的学习时…

    database 2023年5月22日
    00
  • Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤

    下面为您详细讲解添加外部Jar包以及配置多数据源的完整步骤。 添加外部Jar包 一、将Jar包放置到项目的lib目录下: 将外部Jar包放到项目的lib目录下,需要注意的是,这个lib目录需要在classpath里面注册,可以在maven pom.xml中添加以下代码实现: <dependency> <groupId>org.spri…

    database 2023年5月21日
    00
  • SQL中查找某几个字段完全一样的数据

    要查询SQL中某几个字段完全一样的数据,可以采用以下步骤: 1.使用SELECT语句进行数据查询。2.在SELECT语句中使用DISTINCT关键词进行筛选,过滤掉重复的数据。3.使用GROUP BY语句进行分组,将具有相同值的数据归为一组。4.使用HAVING语句进行进一步筛选,找出具有相同值的数据组。 例如,在以下学生表格中,要查询姓名和年龄完全一样的所…

    database 2023年5月21日
    00
  • Redis 源码解析之通用双向链表(adlist)

    Redis源码中广泛使用 **adlist(A generic doubly linked list)**,作为一种通用的双向链表,用于简单的数据集合操作。adlist提供了基本的增删改查能力,并支持用户自定义深拷贝、释放和匹配操作来维护数据集合中的泛化数据 `value`。 Redis 源码解析之通用双向链表(adlist) 概述 Redis源码中广泛使用…

    2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部