您的位置:首页 > 数据库

case when 运用的一点提醒

2014-12-02 14:43 162 查看
对于运用sql 的同学对 case when 肯定很熟悉,这边就不贴出 case when  的语法了,直接上例子说明:

下面是构建的测试数据,插入语句就不附上了。



1.如图所示,结果应该和你想象的没什么不同



2.改变一下SUM 的位置



咦,好像结果完全相同啊,我是不是在忽悠你们啊,嘿嘿

3.那么接下来我们修改一下 条件

pay_sum>=20 and pay_sum<=50,那么结果会是怎么样的呢?



4.我们来看一下 sum 在外面的情况



结果不一样了,那这是什么情况呢,为什么 id  等于 1和2 的时候不一致呢,id 等3 的时候又相同呢,经过观察发现 id 1和2 的第一条记录 都是10 ,也就是说都是不满足

pay_sum>=20这个条件的。我们可以人为上面 语句3   的 执行顺序是这样的,首先对 pay_sum>=20 and pay_sum<=50  的作用仅仅是用来做一个逻辑判断 对应的值是 取还是不取呢?


5.也许有人问,就算第一条不符合条件后面几条还是有符合的条件的呀,这边我们可以来看一下



从这里我们可以看出来,当case when 外层没有对应的聚合函数后面存在group by  的话,只会对分组字段的第一条进行判断。

这样的话上面的执行顺序我们可以总结为:先通过对每个Id 的第一条数据的 pay_sum 进行判断,符合条件的进行聚合,不符合的返回空。

6.我要说明的问题其实已经结束了,但是我们要来确认一个情况, pay_sum>=20 and pay_sum<=50 是不是仅仅作为一个逻辑判断来确定是否聚合还是有 过滤作用。



修改一下pay_sum 的条件



完全没有区别,这也说明了我们上面的猜测是对的,pay_sum 的条件仅仅是用来判断是来判断 是否聚合,对判断聚合的结果没有影响。

上面是我在工作中遇到的一点问题,如果理解有误,欢迎大家帮我指出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql 工作