【SQL】SQL中CaseWhen的用法

【SQL】SQL中CaseWhen的⽤法

Case具有两种格式。简单Case函数和Case搜索函数。

--简单Case函数

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '⼥'

ELSE '其他' END

--Case搜索函数

CASE WHEN sex = '1' THEN '男'

WHEN sex = '2' THEN '⼥'

ELSE '其他' END

两种⽅式,可以实现相同的功能。简单Case函数的写法相对⽐较简洁,但是和Case搜索函数相⽐,功能⽅⾯会有些限制,⽐如写判断式。

还有⼀个需要注意的问题,Case函数只返回第⼀个符合条件的值,剩下的Case部分将会被⾃动忽略。

--下⾯这段SQL,你永远⽆法得到“第⼆类”这个结果

CASE WHEN col_1 IN ( 'a', 'b') THEN '第⼀类'

WHEN col_1 IN ('a') THEN '第⼆类'

ELSE'其他' END

下⾯我们来看⼀下,使⽤Case函数都能做些什么事情。

⼀,已知数据按照另外⼀种⽅式进⾏分组,分析。

有如下数据:(为了看得更清楚,我并没有使⽤国家代码,⽽是直接⽤国家名作为Primary Key)根据这个国家⼈⼝数据,统计亚洲和北美洲的⼈⼝数量。应该得到下⾯这个结果。

解决这个问题,你会怎么做?⽣成⼀个带有洲Code的View是⼀个解决⽅法,但是这样很难动态的改变统计的⽅式。如果使⽤Case函

数,SQL代码如下:

SELECT SUM(population),

CASE country

WHEN '中国' THEN '亚洲'

WHEN '印度' THEN '亚洲'

WHEN '⽇本' THEN '亚洲'

WHEN '美国' THEN '北美洲'

WHEN '加拿⼤' THEN '北美洲'

WHEN '墨西哥' THEN '北美洲'

ELSE '其他'

END

FROM Table_A

GROUP BY

CASE country

WHEN '中国' THEN '亚洲'

WHEN '印度' THEN '亚洲'

WHEN '⽇本' THEN '亚洲'

WHEN '美国' THEN '北美洲' WHEN '加拿⼤' THEN '北美洲'

WHEN '墨西哥' THEN '北美洲'

ELSE '其他'

END;

这⾥笔者解释⼀下上⾯的分组过程,先按照country字段分三组,然后显⽰出每组⾥⾯的⼈⼝数,已经分组的条件。

SELECT

CASE WHEN salary <= 500 THEN '1'

WHEN salary > 500 AND salary <= 600 THEN '2'

WHEN salary > 600 AND salary <= 800 THEN '3'

WHEN salary > 800 AND salary <= 1000 THEN '4'

ELSE NULL END salary_class, -- 别名命名

COUNT(*)

FROM Table_A

GROUP BY

CASE WHEN salary <= 500 THEN '1'

WHEN salary > 500 AND salary <= 600 THEN '2'

WHEN salary > 600 AND salary <= 800 THEN '3'

WHEN salary > 800 AND salary <= 1000 THEN '4'

ELSE NULL END;

⼆,⽤⼀个SQL语句完成不同条件的分组。有如下数据按照国家和性别进⾏分组,得出结果如下

普通情况下,⽤UNION也可以实现⽤⼀条语句进⾏查询。但是那样增加消耗(两个Select部分),⽽且SQL语句会⽐较长。下⾯是⼀个是⽤

Case函数来完成这个功能的例⼦

SELECT country,

SUM( CASE WHEN sex = '1' THEN population ELSE 0 END), --男性⼈⼝

SUM( CASE WHEN sex = '2' THEN population ELSE 0 END) --⼥性⼈⼝

FROM Table_A GROUP BY country;

三,在Check中使⽤Case函数。

Check是⼀种约束类型,在Check中使⽤Case函数在很多情况下都是⾮常不错的解决⽅法。可能有很多⼈根本就不⽤Check,那么我建议你

在看过下⾯的例⼦之后也尝试⼀下在SQL中使⽤Check。

下⾯我们来举个例⼦

公司A,这个公司有个规定,⼥职员的⼯资必须⾼于1000块。如果⽤Check和Case来表现的话,约束部分的语句为:

CONSTRAINT check_salary CHECK ( CASE WHEN sex = '2' THEN CASE WHEN salary > 1000 THEN 1 ELSE 0 END ELSE 1 END = 1 )

如果单纯使⽤Check: CONSTRAINT check_salary CHECK ( sex = '2' AND salary > 1000 ) ⼥职员的条件倒是符合了,男职员就⽆法输⼊

了。

四,根据条件有选择的UPDATE。

例,有如下更新条件

1.⼯资5000以上的职员,⼯资减少10%2.⼯资在2000到4600之间的职员,⼯资增加15%

很容易考虑的是选择执⾏两次UPDATE语句,如下所⽰

--条件1

UPDATE Personnel SET salary = salary * 0.9 WHERE salary >= 5000;

--条件2

UPDATE Personnel SET salary = salary * 1.15

WHERE salary >= 2000 AND salary < 4600;

但是事情没有想象得那么简单,假设有个⼈⼯资5000块。⾸先,按照条件1,⼯资减少10%,变成⼯资4500。接下来运⾏第⼆个SQL时候,

因为这个⼈的⼯资是4500在2000到4600的范围之内,需增加15%,最后这个⼈的⼯资结果是5175,不但没有减少,反⽽增加了。如果要是反

过来执⾏,那么⼯资4600的⼈相反会变成减少⼯资。暂且不管这个规章是多么荒诞,如果想要⼀个SQL 语句实现这个功能的话,我们需要

⽤到Case函数。代码如下:

UPDATE Personnel

SET salary =

CASE WHEN salary >= 5000 THEN salary * 0.9

WHEN salary >= 2000 AND salary < 4600 THEN salary * 1.15

ELSE salary END;

这⾥要注意⼀点,最后⼀⾏的ELSE salary是必需的,要是没有这⾏,不符合这两个条件的⼈的⼯资将会被写成NUll,那可就⼤事不妙了。在

Case函数中Else部分的默认值是NULL,这点是需要注意的地⽅。

这种⽅法还可以在很多地⽅使⽤,⽐如说变更主键这种累活。

⼀般情况下,要想把两条数据的Primary key,a和b交换,需要经过临时存储,拷贝,读回数据的三个过程,要是使⽤Case函数的话,⼀切都

变得简单多了。

p_keycol_1col_2

a1张三

b2李四

c3王五

假设有如上数据,需要把主键a和b相互交换。⽤Case函数来实现的话,代码如下

UPDATE SomeTable

SET p_key = CASE WHEN p_key = 'a' THEN 'b'

WHEN p_key = 'b' THEN 'a' ELSE p_key END

WHERE p_key IN ('a', 'b');

同样的也可以交换两个Unique key。需要注意的是,如果有需要交换主键的情况发⽣,多半是当初对这个表的设计进⾏得不够到位,建议检

查表的设计是否妥当。

五,两个表数据是否⼀致的检查。

Case函数不同于DECODE函数。在Case函数中,可以使⽤BETWEEN,LIKE,IS NULL,IN,EXISTS等等。⽐如说使⽤IN,EXISTS,可以进⾏

⼦查询,从⽽ 实现更多的功能。

下⾯具个例⼦来说明,有两个表,tbl_A,tbl_B,两个表中都有keyCol列。现在我们对两个表进⾏⽐较,tbl_A中的keyCol列的数据如果在

tbl_B的keyCol列的数据中可以找到,返回结果'Matched',如果没有找到,返回结果'Unmatched'。

要实现下⾯这个功能,可以使⽤下⾯两条语句

--使⽤IN的时候

SELECT keyCol,

CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B ) THEN 'Matched'

ELSE 'Unmatched' END Label

FROM tbl_A;

--使⽤EXISTS的时候

SELECT keyCol,

CASE WHEN EXISTS ( SELECT * FROM tbl_B WHERE tbl_A.keyCol = tbl_B.keyCol ) THEN 'Matched' ELSE 'Unmatched' END Label

FROM tbl_A;

使⽤IN和EXISTS的结果是相同的。也可以使⽤NOT IN和NOT EXISTS,但是这个时候要注意NULL的情况。

六,在Case函数中使⽤合计函数

假设有下⾯⼀个表

学号(std_id)课程ID(class_id)课程名(class_name)主修flag(main_class_flg)

1001经济学Y

1002历史学N

2002历史学N

2003考古学Y

合集下载

sqlserver case when用法sql

sqlserver case when用法sql

sqlserver case when用法sql

在 SQL Server 中,`CASE WHEN` 语句用于实现条件逻辑,根据给定的条件返回不同的结果。`CASE WHEN` 可以在 `SELECT` 语句、`WHERE` 子句、`ORDER BY` 子句等中使用。以下是一些基本的用法示例:

1. 在 SELECT 语句中使用 CASE WHEN:

```sql

SELECT

column1,

column2,

CASE

WHEN condition1 THEN 'Result1'

WHEN condition2 THEN 'Result2'

ELSE 'DefaultResult'

END AS ResultColumn

FROM

YourTable;

```

在这个例子中,根据不同的条件,`ResultColumn` 将返回不同的结果。

2. 在 WHERE 子句中使用 CASE WHEN:

```sql

SELECT

column1,

column2

FROM

YourTable

WHERE

CASE

WHEN condition1 THEN 1

WHEN condition2 THEN 1

ELSE 0

END = 1;

```

在这个例子中,`WHERE` 子句用于过滤满足条件的行。

3. 在 ORDER BY 子句中使用 CASE WHEN:

```sql

SELECT

column1,

column2

FROM

YourTable

ORDER BY

CASE

WHEN condition1 THEN column1

WHEN condition2 THEN column2

case when语句使用详解

case when语句使用详解

case when语句使用详解

案例:根据销售数据分析各个地区的销售情况

引言:

在企业管理和数据分析过程中,我们经常需要进行数据的筛选和统计分析,以便更好地了解业务的情况并做出合理的决策。case when语句是一种常用的SQL函数,它可以根据特定的逻辑条件对字段进行分类和筛选,使得数据分析更加灵活和有针对性。本文将详细介绍case when语句的使用方法,并以根据销售数据分析各个地区的销售情况为例进行说明。

第一步:了解case when语句的基本语法

case when语句是SQL语言中的一种条件表达式,它用于根据不同的条件对字段进行分类和筛选。其基本语法如下:

case

when 条件1 then 结果1

when 条件2 then 结果2

...

else 结果n

end

其中,条件是用于判断的表达式或逻辑关系,结果是条件满足时的返回结果。case when语句从上到下依次判断每个条件,直到找到满足条件的结果为止,如果都不满足条件,则返回else后的结果。

第二步:创建示例数据表

为了说明case when语句的使用方法,我们首先需要创建一个包含销售数据的示例数据表。假设我们的表名为sales,包含以下字段:地区(region)、销售额(amount)、销售日期(date)等。

第三步:利用case when语句进行数据分析

在分析销售数据时,我们经常需要根据不同的条件对销售额进行分类和统计。下面是几个根据地区进行销售情况分析的例子:

1. 分析各个地区的销售总额:

select

region,

sum(amount) as total_sales

from

sales

group by

region;

这条SQL语句会根据sales表中的地区字段进行分组,然后计算每个地区对应的销售额总和。

2. 分析各个地区的销售额占比:

select

region,

mysql中casewhen的用法

mysql中casewhen的用法

mysql中casewhen的用法

摘要:

1.MySQL 中的 CASE WHEN 用法简介

2.CASE WHEN 的语法结构

3.CASE WHEN 在 MySQL 中的实际应用

4.CASE WHEN 与 IF 函数的对比

5.总结 CASE WHEN 的优点和使用场景

正文:

MySQL 中的 CASE WHEN 用法是一种在查询结果中根据条件返回不同值的方法,它可以使查询结果更加灵活和具有可读性。本文将详细介绍 CASE

WHEN 的用法及其在 MySQL 中的实际应用。

首先,我们需要了解 CASE WHEN 的语法结构。在 MySQL 中,CASE

WHEN 的语法如下:

```sql

CASE 表达式

WHEN 条件 1 THEN 值 1

WHEN 条件 2 THEN 值 2

...

WHEN 条件 n THEN 值 n

ELSE 默认值

END ```

其中,表达式是要进行判断的逻辑表达式,条件 1、条件 2...条件 n 是根据表达式的结果进行判断的各个条件,值 1、值 2...值 n 是根据各个条件返回的结果,默认值是在所有条件都不满足时返回的默认值。

接下来,我们通过一个具体的例子来了解 CASE WHEN 在 MySQL 中的实际应用。假设有一个名为`students`的表,包含以下字段:`id`、`name`、`gender`和`age`。我们想要查询学生的年龄大于等于 18 岁的男生姓名。可以使用如下查询语句:

```sql

SELECT name

FROM students

WHERE gender = "男" AND age >= 18

```

如果我们将查询条件改为使用 CASE WHEN,查询语句可以变得更简洁和直观:

```sql

SELECT name

case when用法sqlser

case when用法sqlser

case when用法sqlser

CASE WHEN 用法在 SQL Server 中

CASE WHEN 是 SQL Server 中非常常用的一种条件表达式,用于在查询语句中进行条件分支判断。它能够根据一个或多个条件,返回不同的结果,进而实现更灵活、更复杂的查询。

CASE WHEN 语法格式如下:

```

CASE

WHEN condition1 THEN result1

WHEN condition2 THEN result2

...

WHEN conditionN THEN resultN

ELSE result

END

```

其中,condition1、condition2、...、conditionN 是一系列条件表达式,result1、result2、...、resultN 是与条件表达式相对应的结果。ELSE 子句是可选的,用于在所有条件都不满足时返回一个默认结果。

下面我们以一个具体的例子来说明 CASE WHEN 的用法。 假设我们有一个名为 Students 的表,包含以下字段:

- ID: 学生ID

- Name: 学生姓名

- Gender: 学生性别

- Age: 学生年龄

- Grade: 学生成绩

我们现在希望根据学生成绩的不同区间,给定不同的评级。

首先,我们可以使用 CASE WHEN 来实现这个需求:

```sql

SELECT

ID,

Name,

Grade,

CASE

WHEN Grade >= 90 THEN '优秀'

WHEN Grade >= 80 THEN '良好'

WHEN Grade >= 70 THEN '中等'

WHEN Grade >= 60 THEN '及格' ELSE '不及格'

SQL中的case when then else end用法

SQL中的case when then else end用法

SQL中的case when then else end用法

Case具有两种格式。简单Case函数和Case搜索函数。

--简单Case函数

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '女'

ELSE '其他' END

--Case搜索函数

CASE WHEN sex = '1' THEN '男'

WHEN sex = '2' THEN '女'

ELSE '其他' END

这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。

还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。

--比如说,下面这段SQL,你永远无法得到“第二类”这个结果

CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'

WHEN col_1 IN ('a') THEN '第二类'

ELSE'其他' END

下面我们来看一下,使用Case函数都能做些什么事情。

一,已知数据按照另外一种方式进行分组,分析。

有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)

国家(country) 人口(population)

中国 600

美国 100

加拿大 100

英国 200

法国 300

日本

250

德国 200

墨西哥 50

印度 250

根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。

洲 人口

亚洲 1100

北美洲 250

其他 700

想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。

如果使用Case函数,SQL代码如下:

sql的case when的用法

sql的case when的用法

- 1 - sql的case when的用法

其中,`condition1`、`condition2`等表示条件表达式,`result1`、`result2`等表示对应的结果,`default_result`表示默认结果。

使用case when语句可以实现多种功能,比如:

1. 根据不同条件进行数据统计

```sql

SELECT

COUNT(CASE WHEN sex='男' THEN 1 ELSE NULL END) AS '男性人数',

COUNT(CASE WHEN sex='女' THEN 1 ELSE NULL END) AS '女性人数',

COUNT(*) AS '总人数'

FROM student;

```

2. 根据条件进行数据分组

```sql

SELECT

CASE WHEN age >= 18 THEN '成年人' ELSE '未成年人' END AS

'年龄分组',

COUNT(*) AS '人数'

FROM student - 2 - GROUP BY CASE WHEN age >= 18 THEN '成年人' ELSE '未成年人' END;

```

在使用case when语句时,需要注意以下几点:

1. case语句可以嵌套使用,但是尽量不要嵌套太深,以免影响查询效率。

2. 最好使用ELSE语句,避免出现null值。

3. case语句可以和其他函数一起使用,如sum、avg、max等函数。

数据库SQL中casewhen函数的用法

数据库SQL中casewhen函数的⽤法

Case具有两种格式,简单Case函数和Case搜索函数。这两种⽅式,可以实现相同的功能。简单Case函数的写法相对⽐较简洁,但是和Case搜索函数相⽐,功能⽅⾯会有些限制,⽐如写判断式。

简单Case函数CASE sex WHEN '1' THEN '男' WHEN '2' THEN '⼥' ELSE '其他' ENDCase搜索函数

CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '⼥' ELSE '其他' END还有⼀个需要注意的问题,CASE函数只返回第⼀个符合条件的值,剩下的CASE部分将会被⾃动忽略。⽐如说,下⾯这段SQL,你永远⽆法得到“第⼆类”这个结果CASE WHEN col_1 IN ( 'a', 'b') THEN '第⼀类' WHEN col_1 IN ('a') THEN '第⼆类' ELSE'其他' END⼀,已知数据按照另外⼀种⽅式进⾏分组,分析。

有如下数据:(为了看得更清楚,我并没有使⽤国家代码,⽽是直接⽤国家名作为Primary Key)

国家(country)⼈⼝(population) 中国 600

美国 100

加拿⼤ 100

英国 200

法国 300

⽇本 250

德国 200

墨西哥 50

印度 250

根据这个国家⼈⼝数据,统计亚洲和北美洲的⼈⼝数量。应该得到下⾯这个结果。

洲 ⼈⼝

亚洲 1100

北美洲 250

其他 700

想要解决这个问题,你会怎么做?⽣成⼀个带有洲Code的View,是⼀个解决⽅法,但是这样很难动态的改变统计的⽅式。 如果使⽤Case函数,SQL代码如下:SELECT SUM(population),

CASE country

WHEN '中国' THEN '亚洲'

WHEN '印度' THEN '亚洲'

WHEN '⽇本' THEN '亚洲'

SQL中的casewhenthenelseend用法(数据库内容纵向变横向)

SQL中的casewhenthenelseend⽤法(数据库内容纵向变横向)

SQL中的case when then else end⽤法

当我们需要从数据源上 直接判断数据显⽰代表的含义的时候 ,就可以在SQL语句中使⽤ Case When这个函数了.

Case具有两种格式。简单Case函数和Case搜索函数。

简单函数

CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END

搜索函数

CASE WHEN [expr] THEN [result1]…ELSE [default] END

达梦数据库建表SQL

CREATE TABLE "TEST"."CJT"

(

"ID" INT NOT NULL,

"KC" VARCHAR(50),

"FS" INT,

"NAME" VARCHAR(50),

CLUSTER PRIMARY KEY("ID")) STORAGE(ON "TEST", CLUSTERBTR) ;

COMMENT ON TABLE "TEST"."CJT" IS '成绩表';

COMMENT ON COLUMN "TEST"."CJT"."ID" IS '主键';

COMMENT ON COLUMN "TEST"."CJT"."KC" IS '课程名称';

COMMENT ON COLUMN "TEST"."CJT"."FS" IS '分数';

COMMENT ON COLUMN "TEST"."CJT"."NAME" IS '姓名';

执⾏SQL

SELECT

NAME AS "姓名",

(CASE KC WHEN '语⽂' THEN FS ELSE 0 END) AS "语⽂",

(CASE KC WHEN '数学' THEN FS ELSE 0 END) AS "数学",

(CASE KC WHEN '英语' THEN FS ELSE 0 END) AS "英语"

sql server case when 用法

sql server case when 用法

SQL Server 中的 CASE WHEN 语句是一个条件表达式,它允许你在查询中进行条件判断,并根据条件返回不同的结果。这种结构在数据转换、分类、以及复杂的逻辑判断中非常有用。

基本语法

CASE WHEN 语句的基本语法如下:

CASE

WHEN condition1 THEN result1

WHEN condition2 THEN result2

...

ELSE resultN

END

• condition1, condition2, ... 是要评估的条件。

• result1, result2, ... 是当对应条件为真时返回的结果。

• ELSE 子句是可选的,用于指定当所有条件都不为真时返回的结果。

示例 假设我们有一个名为 Employees 的表,其中包含 Salary 列。我们想要根据员工的薪水为他们分类:

SELECT

Salary,

CASE

WHEN Salary < 30000 THEN 'Low'

WHEN Salary BETWEEN 30000 AND 60000 THEN 'Medium'

WHEN Salary > 60000 THEN 'High'

ELSE 'Not Classified'

END AS SalaryClass

FROM Employees;

在这个示例中,我们根据员工的薪水为他们分配了 'Low'、'Medium'、'High' 或 'Not Classified' 的分类。

特点

1. 灵活性:CASE WHEN 语句允许你进行复杂的条件判断,不仅仅是简单的等于或不等于。

2. 可读性:通过明确的条件和结果,使查询逻辑更加清晰易懂。

3. 性能:虽然 CASE WHEN 语句在大多数情况下性能良好,但在处理大量数据时,复杂的条件判断可能会对性能产生一定影响。 4. 替代性:虽然 CASE WHEN 非常有用,但在某些情况下,你可能需要使用其他函数或方法来实现相同的逻辑,如 IIF 函数。

Sql_Case_When用法

SQL中Case的使用方法

Case具有两种格式。简单Case函数和Case搜索函数。

--简单Case函数

CASE sex

WHEN '1' THEN '男'

WHEN '2' THEN '女'

ELSE '其他' END

--Case搜索函数

CASE WHEN sex = '1' THEN '男'

WHEN sex = '2' THEN '女'

ELSE '其他' END

这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。

还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。

--比如说,下面这段SQL,你永远无法得到“第二类”这个结果

CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'

WHEN col_1 IN ('a') THEN '第二类'

ELSE'其他' END

下面我们来看一下,使用Case函数都能做些什么事情。

一,已知数据按照另外一种方式进行分组,分析。

有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)

国家(country)人口(population)

中国600

美国100

加拿大100

英国200

法国300

日本250

德国200

墨西哥50

印度250

根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。

洲人口

亚洲1100

北美洲250 其他700

想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。

如果使用Case函数,SQL代码如下:

SELECT SUM(population),

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档