这个问题,可能在mybatis的xml文件和Mapper类返回类型不一致时,导致异常。
如xml文件的resultType是Integer,Mapper类对应方法返回int,mybatis会报错:
org.apache.ibatis.binding.BindingException: attempted to return null from a method with a primitive return type (int)
解决方法:Mapper类对应方法返回Integer 或 sql语句增加IFNULL(count(0), 0)判断
MySQL select count(0)语句返回null问题为什么返回null呢?正常情况下,select count(0)会返回0。但当sql语句命中索引时,MySQL会先检查索引;如果没有命中任何数据,就返回null。而且这种sql语句,使用explain命令也不会输出执行计划,会直接显示执行结果。有什么影响?这个问题,可能在mybatis的xml文件和Mapper类返回类型不一致时...
select
count
(*) from table;
其实
count
函数中除了*还可以放其他参数,比如常数、主键id、字段,那么它们有什么区别?各自效率如何?我们应该使用哪种方式来获取表的行数呢?
当搞清楚
count
函数的运行原理后,相信上面几个
问题
的答案就会了然于胸。
2. 表结构
为了解决上述的
问题
,我创建了一张 user 表,它有两个字段:主键id和name,后者可以为
null
,建表语句如下。
CREATE TABLE `user` (
`id` int(11) NOT
NULL
AUTO_I
具体错误信息:
org.apache.ibatis.binding.BindingException: Mapper method 'com.xx.xx.xx.xx.xx.get
Count
attempted to
return
null
from a method with a primitive
return
type (int).
定义的Integer,怎么会
返回
nul
-- 运行此sql会得到一个
null
值,我们在做数据列表展示时,即使无数据也必须
返回
0而非
null
,
如果我们不在后台代码里对运行sql之后的结果进行判断处理的话,
我们就必须想办法在sql里解决这件事情。
select
count
(DISTINCT a.id)
FROM t_topic a
LEFT JOIN t_m_user b on b.id=a.create_by and b.d...
没有和 GROUP BY联合使用。
这样我们一般如果指定了
count
()的字段,有可能会因为字段的数量为
null
出现
返回
null
。这样我们使用orm时就会出现一些尴尬的报错。
目前测试出来的解决方式用*代替字段,这样能
返回
0.但是影响效率。后面如果研究一下
mysql
有其他解决方案会更新文章。
第二种是使用group ...
分析订单数量,一个客户可能没有订单,订单数应该为0,简单group by结果都为1,因为客户记录怎么都有一条存在。
解决方法:
select
customer.customerid,customername,IF
NULL
(t1.
count
,0),sumoderweight,sumordervolume,sumorderprice
from customer left join
(
select
SELECT
IS
NULL
(business_name,'no business_name') AS bus_is
null
FROM business WHERE id=2
直接运行就会报错:
错误代码: 1582
Incorrect parameter
count
in the call to native function 'is
null
'
所以,is
null
()函数在
mysql
中就行不通了。可以用if
null
()和coalesce()代替。如下:
使用ifnu
coalesce 函数可以接受多个参数,将会
返回
这些参数中第一个非
NULL
的值,若提供的参数全部为
NULL
,则
返回
NULL
if
null
函数和coalesce功能一样,只是只可以接受两个参数if 函数接受三个参数,实现类似于三元判断符(?:)的功能,即第一个参数不为
NULL
且不为0时,
返回
第二个参数,否则
返回
第三个参数 代码如下:
SELECT
a.*,coalesce(t.cous,0) as
count
FROM brand as a left join (
select
brandid as bid,
count
(1) as cous from shopbrand group by bran
mysql
count
详解
count
函数是用来统计表中或数组中记录的一个函数,下面我来介绍在
mysql
中
count
函数用法。
count
(*) 它
返回
检索行的数目, 不论其是否包含
NULL
值。
SELECT
从一个表中检索,而不检索其它的列,并且没有 WHERE子句时,
COUNT
(*)被优化到最快的
返回
速度。
mysql
>
SELECT
COUNT
(*) FROM student;
COUNT
(DISTINCT 字段)这个优化仅适用于 MyISAM表, 原因是这些表类型会储存一个函数
返回
记录的精确数量,而且非常容易访问。
对于事务型的存储引擎(InnoDB, BDB), 存
前一段时间在公司做一个小功能的时候,统计一下某种情况下有多少条数据,然后修改的
问题
,当时感觉很简单,写了一个如下的 SQL:
SELECT
COUNT
(*) FROM t1 where tl.c1 not IN (
SELECT
t2.c1 FROM t2);
预期的结果是:有多少条数据在 t1 中,同时不在 t2 中,结果为:0,也就是 t1 中数据都在 t2 中,但是很容易就发现某些数据在 t1 中不在 t2 中,所以就感觉很奇怪,这个 SQL 看着也没
问题
啊。经过一番查询原来是因为 t2 的 c1 字段包含了
null
值,修改如下两种形式都可以得到预期的结果:
SELECT
COUN