
<p>
</p>
<p>这里是一个测试,可以看到使用列名value来做then的值是可以的:</p>
mysql>
select
*
from
aaa
+------+-------+
|
id
|
value
|
+------+-------+
|
1
|
1
|
|
2
|
3
|
|
3
|
4
|
|
4
|
4
|
|
5
|
4
|
|
6
|
6
|
|
8
|
8
|
|
7
|
7
|
|
9
|
8
|
|
10
|
10
|
|
11
|
11
|
|
12
|
11
|
|
13
|
11
|
|
14
|
11
|
|
15
|
12
|
+------+-------+
15
rows
in
set
(0.00
sec)
mysql>
select
id,
value,
case
id
when
1
then
value
when
2
then
2
*
value
when
3
then
'xxx'
else
0
end
as
case_col
->
from
aaa
+------+-------+----------+
|
id
|
value
|
case_col
|
+------+-------+----------+
|
1
|
1
|
1
|
|
2
|
3
|
6
|
|
3
|
4
|
xxx
|
|
4
|
4
|
0
|
|
5
|
4
|
0
|
|
6
|
6
|
0
|
|
8
|
8
|
0
|
|
7
|
7
|
0
|
|
9
|
8
|
0
|
|
10
|
10
|
0
|
|
11
|
11
|
0
|
|
12
|
11
|
0
|
|
13
|
11
|
0
|
|
14
|
11
|
0
|
|
15
|
12
|
0
|
+------+-------+----------+
15
rows
in
set
(0.00
sec)
第一种:简单Case函数
case 列名
when 条件值1 then 选择项1
when 条件值2 then 选项2.......
else 默认值 end
第二种:Case搜索函数
case
when 列名= 条件值1 then 选择项1
when 列名=条件值2 then 选项2.......
else 默认值 end
比较: 两种格式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。如下面这个例子:
CASE col
WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a') THEN '第二类'
ELSE'其他' END
这个语句中,满足条件a永远不会返回第二类,因为按顺序发现a在第一类的时候查询就已经结束了。所以case无法用于一个东西在一个分类里有不同的属性的条件。
case when 好处很明显就是非常易于看懂,相比实现同样条件用复杂的自连接查询,在逻辑上很容易看懂(自连接查询在不同的情况下可能会有BUG)。
case when的两种写法简单判断:
要判断值的列写在case后面,when后面写值,相等的情况执行then后的语句,可以写多个when判断语句,都不满足返回else后的值,要以end结尾,end后面可以给该列指定列名。
CASE [col_name]
WHEN [value1] THEN [result1]
WHEN [value1] THEN [result2]
....
ELSE [default]
END [new_col_name]
表达式判断:
case开头,when后面写表达式,表达式为真则执行then后的语句,可以写多个when判断表达式,都不满足的情况下返回else后的值,以end结尾,end后可以为该列指定列名。
CASE
WHEN [expr] THEN [result1]
WHEN [expr] THEN [result2]
....
ELSE [default]
END [new_col_name]
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)