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 的条件仅仅是用来判断是来判断 是否聚合,对判断聚合的结果没有影响。
上面是我在工作中遇到的一点问题,如果理解有误,欢迎大家帮我指出。
下面是构建的测试数据,插入语句就不附上了。
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(二) count sum case when then group by
- hql 中的case when运用查询
- WITH AS ,case when then else end 在sql中的运用
- SQL case when then else end运用
- SQL使用CASE WHEN THEN
- Oracle CASE WHEN 用法介绍
- [MSSQL]一步一步教你利用case when 实现行列转换
- mysql 中 case 语句的运用
- sqlserver使用order by case when进行优先级排序
- 网站设计WEB开发需要了解的一点色彩运用知识
- sql case when
- Spark之CASE...WHEN...THEN...的两种实现方式
- web-harvest case语句的一点小总结
- SQL Case when 的使用
- 解决:ClassCastException when testcase is using Spring AOP proxied
- Oracle select case when 语法
- sql语句中case when的用法
- Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例
- SQL条件控制(case when...then...else...end)用法描述
- 以Case...When...Then...End分列输出