很多人都说不要把sql只当作查询语句而要把它当作一门语言来看待。那么语言最大的一个特性就要有逻辑结构,比如条件结构(if)。通用sql也有这样的结构,** case when ** 就是其中之一。
很多人都说不要把sql只当作查询语句而要把它当作一门语言来看待。那么语言最大的一个特性就要有逻辑结构,比如条件结构(if)。通用sql也有这样的结构, case when 就是其中之一。
case when 如何用呢,完整的关键词是:case when then else end。
有两种表达方式:
1.条件是一个具体的值。
CASE field WHEN value THEN result1 ELESE result2 END;
CASE field
WHEN value THEN result1
WHEN value THEN result2
ELESE result3
END;
2.条件作为一个表达式存在。
CASE WHEN expression THEN result1 ELESE result2 END;
CASE
WHEN expression1 THEN result1
WHEN expression2 THEN result2
ELESE result3
END;
这里的else关键词不算必需的。
对于case when 看我是怎么在项目中应用的?
应用场景:
一个推广人员(有两级,高级推广人和子推广人)的交易表分成表。推广人交易一笔会拿到相应的提成(字段basic_withdrawable),如果是子推广人推广除了自己拿到提成外,ta的高级推广人也会拿到相对比例的提成。现在有一个需求查看某一个推广人的分成信息。
表数据如下:
根据需求我们知道分成来自两个方面,一个作为高级推广人其子推广人贡献的提成,一个自身做为一个推广人交易的提成。那查询的结果为:
从上面结果看如果没加上推广人id字段是很难区分哪一个我的提成的,而且没有必要区分二者提成。接下来要做的事儿就是把自身推广提成和子推广提成并成一列。
case when 就派上用场了,使用下面sql:
select id, order_id,
case
when super_promoter_id = 5 then super_withdrawable
when basic_promoter_id = 5 then basic_withdrawable
end as withdrawable
from transactions where super_promoter_id = 5 or basic_promoter_id = 5;
结果如下:
结果是不是清晰明了符合需求了?
总结上面的实例, where 查询可以对行进行过滤,case when 查询在字段中的应用可以对列进行过滤 。这样行过滤和列过滤的结合可以写出非常漂亮的sql语句。
除特别注明外,本站所有文章均为作者原创。 或分享自己的编程经验,或探讨工作中的问题,或聊以人生趣事。 转载请注明出处来自 https://www.qiusuoweb.com/44.html
运营天数
总访问量
文章数量
-
-
-
交流群:157451741
新浪微博:草莽兴
发布评论