SQL语句case when外用sum与count的区别
2015-12-14 15:38
399 查看
如下这个表TEST: category | commdity | price ------------+------------+------- 衣服 | T恤 | 1000 办公用品 | 打孔器 | 500 厨房用具 | 菜刀 | 3000 厨房用具 | 高压锅 | 6800 厨房用具 | 叉子 | 500 厨房用具 | 擦菜板 | 880 办公用品 | 圆珠笔 | 100 衣服 | 运动T恤 | 4000 如果我想把商品按照1000元以下,1000-3000, 3000 以上分为三个档次显示出来,正确的语句是: SELECT SUM (CASE WHEN price <= 1000 THEN 1 ELSE 0 END)AS low, SUM (CASE WHEN price BETWEEN 1001 AND 3000 THEN 1 ELSE 0 END)AS mid, SUM (CASE WHEN price > 3000 THEN 1 ELSE 0 END)AS high FROM TEST; 得出结果 low | mid | high -----+-----+------ 5 | 1 | 2
当把上述语句的sum换成count时,得出结果:
low | mid | high -----+-----+------ 8 | 8 | 8
如果只是用列来显示,SELECT COUNT(price) FROM TEST WHERE price <= 1000 可以得出正确的结果: low ----- 5所以用sum的结果是对的。
原因是什么呢?三个case语句效果相同,其实就是类似于增加一个字段,这个字段,满足条件的为1,不满足的是0,这样sum的效果,就是将所有的1加起来,也就是所有满足条件的记录个数。
而count,会不管是1还是0,都会统计,这样怎么算都是总条目数8个。
相关文章推荐
- mysql--windows忘记密码
- CentOS7.1安装Oracle 12.1客户端以及cx_Oracle
- 问题:oracle 两个表之间的修改;结果:ORACLE 两个表之间更新的实现
- SQL Server2012中如何通过bak文件还原SQL Server2012数据库
- oracle 对对表匹配的进行修改匹配不上的可以进行新增 (MERGE INTO)
- Redis
- [How to]集成SQLite3
- sql语句执行插入后返回ID
- 找到一篇比较全面的解决mysql最大连接数Too many connections问题的帖子
- keepalived+Mysql主从配置实验
- PostgreSQL Type的创建与Type在函数中的使用
- 关于Oracle有两个或者多个实例时,用SID来区分目前oralce使用的是哪个实例。
- oracle查看对象信息
- MySQL Study之--mysqladmin工具应用
- Jfinal连接自助数据库的数据源
- 45 个非常有用的 Oracle 查询语句
- MongoDB索引
- oracle如何判断字段是数字还是字符
- MySQL Study之--mysqladmin工具应用
- mysql 服务安装 到windows服务 管理中