select count(null) from t1; 返回0, 这符合预期, 因为count的传入的值不能为nullselect 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对函数中的条件的处理有什么样的规律
往各位大哥不吝赐教

解决方案 »

  1.   

    select sum(x<200) from t1
    对吗?此是错句
    统计小于200的值的和
      

  2.   

    select count(ifnull(columns,0,1)) from t1; 返回0, 这符合预期, 因为count的传入的值不能为nullselect 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, 不知道这个值是怎么得出来
      

  3.   

    可以算是MYSQL的一个BUG了吧。 理论上应该是返回 0,但显然MYSQL中有什么问题了。这个需要去分析MYSQL的源代码。
      

  4.   


    对, 这个是我搞错了, 但是我现在重新测试, 发现返回的值是表的总行数t21 42 43345 1123 214322432 12
    select sum(x<5) from t2 输出2
    select sum(x<100) from t2 输出3似乎这里起到了count的作用, 这是为什么?????????