详解SQL之CASE WHEN具体用法

详解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日

相关文章

  • Hadoop和MongoDB的区别

    Hadoop和MongoDB都是非关系型数据库。Hadoop是一个高可用性的分布式文件系统,支持大量数据的存储,以及数据的处理和管理。而MongoDB是一个面向文档存储的NoSQL数据库,具备稳定性,性能和可扩展性。下面着重从以下几个方面来讲解Hadoop和MongoDB的区别: 数据的存储 Hadoop存储数据使用的是Hadoop分布式文件系统(HDFS)…

    database 2023年3月27日
    00
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令导入导出数据库方法与实例汇总 一、mysqldump命令概述 mysqldump是MySQL数据库备份工具,可以用来导出MySQL数据库的内容,导出的内容包括表结构、数据和数据库对象等,采用SQL语法描述。本文将讲解在Linux系统中使用mysqldump命令导入导出数据库的方法与实例,并给出几个常用的示例。 二、基本语法格式 mysq…

    database 2023年5月22日
    00
  • Springboot启动报错时实现异常定位

    当Springboot项目启动时,我们经常会遇到各种报错。如果不好好处理这些错误,会导致项目无法正常启动,严重影响开发效率。本文将介绍如何对于Springboot启动报错时,实现异常定位的方法。 1. 查看控制台日志 当Springboot项目启动发生错误时,应该首先查看控制台日志。控制台日志中记录了Springboot项目所有的启动过程信息,包括启动的顺序…

    database 2023年5月18日
    00
  • SQL数据库的所有命令(函数、运算符)汇总大全

    SQL数据库是关系型数据库的代表,是管理和操作存储在其中的关系数据的系统,它具有丰富的命令、函数和运算符等,可以完成几乎所有与数据相关的任务。以下是SQL数据库的所有命令、函数和运算符的大全及描述: SQL命令 数据库操作命令 CREATE DATABASE 创建数据库 DROP DATABASE 删除数据库 ALTER DATABASE 修改数据库 表操作…

    database 2023年5月21日
    00
  • mysql_connect(): Connection using old (pre-4.1.1) authentication protocol refused

    “mysql_connect():Connection using old(pre-4.1.1)authentication protocol refused”是一个很常见的MySQL错误,它通常出现在使用旧版本的MySQL客户端连接新版本MySQL服务器的情况下。在MySQL的4.1.1版本以前,MySQL的身份验证协议中使用了旧的非加密传输的方式进行身份…

    database 2023年5月22日
    00
  • SQL 识别并消除笛卡儿积

    SQL中的笛卡儿积指的是,在没有明确指定两个或多个表之间的关系时,系统会对它们执行笛卡儿积,即对每一个表中的行与其他表中的所有行进行组合,得出所有可能的结果。 为了避免笛卡儿积产生的结果,可以通过以下两种方法进行处理: 第一种方法:使用WHERE子句 WHERE子句可以用来限制查询的结果集,从而避免产生笛卡儿积。 例如,有两个表A和B,它们没有任何的关联,查…

    database 2023年3月27日
    00
  • Redis事务使用方法完整攻略

    Redis事务是一组命令的集合,可以被一起执行,Redis将其作为一个单独的操作处理,这些命令将按顺序按原子方式执行。有效的Redis事务可以帮助处理由多个操作组成的数据的复杂场景。 Redis事务操作需要在activate transaction和commit transaction之间定义。其中,activate transaction用于指示Redis…

    Redis 2023年3月21日
    00
  • mysql常用命令行操作语句

    MySQL是一个常用的数据库管理系统,除了通过GUI图形化工具操作外,我们也可以通过命令行来进行MySQL操作,可以通过以下常用命令行操作语句来完成: 1. 登录MySQL 我们可以通过以下命令来登录MySQL,需要输入用户名和密码: mysql -u 用户名 -p 2. 创建数据库 使用以下命令创建名为database_name的数据库: create d…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部