首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

关于mysql函数 count与sum过滤行错误行为的有关问题

2012-06-23 
关于mysql函数 count与sum过滤行异常行为的问题select count(null) from t1 返回0, 这符合预期, 因为coun

关于mysql函数 count与sum过滤行异常行为的问题
select count(null) from t1; 返回0, 这符合预期, 因为count的传入的值不能为null

select count(x<200) from t1; 返回总行数, 无法过滤行;

select count(x<200 or null) from t1; 可以统计出x小于200的行的数量

select count(x<200 and null) from t1; 返回127399, 不知道这个值是怎么得出来的

表为innodb, 共计130000条记录
-----------------------------------------------
经过测试 select 1454 and null 的返回值为null, 为什么第一条sql与最后一条sql具有不同的结果?


但是可以使用 select sum(x<200) from t1统计小于200的值的和

mysql对函数中的条件的处理有什么样的规律


往各位大哥不吝赐教



[解决办法]
select count(ifnull(columns,0,1)) from t1; 返回0, 这符合预期, 因为count的传入的值不能为null

select count(case when x<100 then 1 else 0 end) from t1; 返回总行数, 无法过滤行;

select count(case when x<200 or x is null then 1 else 0 end) from t1; 可以统计出x小于200的行的数量

select count(这个逻辑有问题) from t1; 返回127399, 不知道这个值是怎么得出来
[解决办法]
可以算是MYSQL的一个BUG了吧。 理论上应该是返回 0,但显然MYSQL中有什么问题了。这个需要去分析MYSQL的源代码。

热点排行