一篇文章带你了解SQL之CASE WHEN用法详解

一篇文章带你了解 SQL 之 CASE WHEN 用法详解

CASE WHEN 简介

在 SQL 中,CASE WHEN 语句用于根据指定的条件执行不同的操作。它类似于程序中的 if-else 语句,对于不同的条件分别执行不同操作。

CASE WHEN 语句包括以下几个部分:

CASE
    WHEN condition_1 THEN result_1
    WHEN condition_2 THEN result_2
    ELSE default_result
END

其中 condition_1, condition_2 为不同的条件,可以是列名或者表达式;result_1, result_2 为不同条件满足时的返回结果;default_result 为所有条件均不满足时的默认返回结果。

CASE WHEN 示例

以下是两个使用 CASE WHEN 的示例。

示例一

假设我们有一个学生成绩表,其中包含学生的姓名、数学成绩和语文成绩。我们希望根据这些成绩计算每个学生的总分,并根据总分的不同等级分类。具体来说,总分在 90 分以上为 A 级,80 分以上为 B 级,70 分以上为 C 级,60 分以上为 D 级,60 分以下为不及格。

以下是 SQL 查询语句:

SELECT
    name,
    math,
    chinese,
    math + chinese AS total_score,
    CASE
        WHEN math + chinese >= 90 THEN 'A'
        WHEN math + chinese >= 80 THEN 'B'
        WHEN math + chinese >= 70 THEN 'C'
        WHEN math + chinese >= 60 THEN 'D'
        ELSE '不及格'
    END AS level
FROM
    score_table;

这里使用了 CASE WHEN 语句来计算每个学生的总分和等级。math + chinese 表示该学生的总分,根据不同的总分区间返回不同的等级。

示例二

假设我们有一个订单表,其中包含订单编号、下单时间和订单状态。对于已取消的订单,我们希望在查询结果中显示为“已取消”,对于未取消的订单,我们希望显示为“未取消”。

以下是 SQL 查询语句:

SELECT
    order_id,
    order_time,
    CASE
        WHEN order_status = '已取消' THEN '已取消'
        ELSE '未取消'
    END AS status
FROM
    order_table;

这里使用了 CASE WHEN 语句来判断订单是否已取消。order_status = '已取消' 表示订单状态为“已取消”,返回“已取消”,否则返回“未取消”。

总结

通过以上两个示例,我们可以看出 CASE WHEN 语句对于根据不同条件返回不同结果非常方便。CASE WHEN 语句在复杂的查询语句中也非常常见,可以帮助我们快速清晰地编写 SQL 语句。

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

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

相关文章

  • MySQL核心参数优化文件my.ini实现

    MySQL是业界最流行的关系型数据库之一,而服务器参数的优化对于MySQL性能的提升至关重要。其中,my.ini文件中的参数就是影响MySQL性能的重要因素之一。本文将为您详细讲解如何优化my.ini文件以提升MySQL性能。 1. 了解既有参数 在优化my.ini文件之前,需要先了解既有参数。使用以下命令查看MySQL当前的参数设置: SHOW VARIA…

    database 2023年5月19日
    00
  • Entity Framework Core中执行SQL语句和存储过程的方法介绍

    当我们使用Entity Framework Core时,我们通常会使用查询编写LINQ查询,这对于大多数业务场景来说已经足够了。但是,某些情况下,我们可能需要执行原始SQL查询或调用存储过程。本文将介绍在Entity Framework Core中执行SQL语句和存储过程的方法。 执行SQL查询 在Entity Framework Core中,我们可以使用F…

    database 2023年5月21日
    00
  • 异常: Unable to determine the provider name for provider factory of type ‘MySql.Data.MySqlClient.MySqlClientFactory’.

      报错信息: 异常: Unable to determine the provider name for provider factory of type ‘MySql.Data.MySqlClient.MySqlClientFactory’. Make sure that the ADO.NET provider is installed or regi…

    MySQL 2023年4月13日
    00
  • Neo4j和MS SQL Server的区别

    Neo4j和MS SQL Server都是常见的数据管理系统,但它们在理念以及实现上有很大的区别。 Neo4j 简介 Neo4j是一个基于图的数据库管理系统。它将数据存储为节点和关系的集合,每个节点和关系都带有属性。这种数据模型可以方便地表示复杂的关系和网络,比如社交网络、知识图谱以及地图应用等。 特点 灵活:Neo4j的图数据模型比关系型数据库更加灵活,可…

    database 2023年3月27日
    00
  • MySQL之存储过程按月创建表的方法步骤

    下面是“MySQL之存储过程按月创建表的方法步骤”的完整攻略。 一、背景 在进行数据存储和处理时,经常需要按照时间进行数据分类和分表存储。而MySQL存储过程是MySQL中的一种存储程序,其可以使得我们能够将一些用于处理经常性任务的SQL语句保存为一个程序,并在需要时调用该程序。在存储过程中,我们可以通过程序控制的方式来实现按照月份创建表的操作。 二、步骤 …

    database 2023年5月22日
    00
  • 一种异步延迟队列的实现方式

    目前系统中有很多需要用到延时处理的功能:支付超时取消、排队超时、短信、微信等提醒延迟发送、token刷新、会员卡过期等等。通过延时处理,极大的节省系统的资源,不必轮询数据库处理任务。 目前大部分功能通过定时任务完成,定时任务还分使用quartz及xxljob两种类型轮询时间短,每秒执行一次,对数据库造成一定的压力,并且会有1秒的误差。轮询时间久,如30分钟一…

    2023年4月10日
    00
  • mybatis中foreach报错:_frch_item_0 not found的解决方法

    针对mybatis中foreach报错:“_frch_item_0 not found”的解决方法,我将提供以下完整攻略。 问题分析 通过对mybatis中foreach的使用进行分析,可以得出使用foreach时,需要保证以下几点: collection属性必须设置为可遍历的集合类型(比如List、Set等)。 item属性必须设置,不然会报错。 当col…

    database 2023年5月21日
    00
  • SQL SERVER 9003错误解决方法

    SQL SERVER 9003错误解决方法 异常信息 在 SQL Server 使用期间,可能会遇到一些异常错误,比如”SQL Server 9003错误“。 下面我们来详细介绍如何解决这个问题。 SQL Server 9003错误通常会出现以下信息: "The LSN (%s) passed to log scan in database ‘%s…

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