问题一:分片前,统计结果只有一条记录;
分片后,返回多条(分片数)统计结果记录。
通过explain可知,分表后相当于SQL分成多个SQL语句查询分表,最后UNION合并结果集。
如下所未
解决方式:1. 含有null值的比较棘手。
2.如果结果是数值型,则可以用在原始语句外增加一层嵌套SQL统计代码,如
select sum(统计字段) sumval from(原始SQL语句.... ......)m
问题二、所有在group by从句中的字段都必须包含在被选择的列中。
java.lang.IllegalArgumentException: all columns in group by clause should be in the selected column list.!DATE_FORMAT(m.cap_time, '%Y%m%d%H')
修改:“group by DATE_FORMAT(m.cap_time,'%Y%m%d%H')”为
“group by cap_time”
问题三、异常 java.lang.NullPointerException
mycat中间件只是为了解决数据分片的问题,但是毕竟只是个中间件,很多功能的支持不是特别完善。 在字段别名出现双引号“”时,出现java.lang.NullPointerException异常。
另外一种情况是,当外面嵌套一层语句时,由于某些分片的返回是NULL记录,空记录也会在结果集当中,此时用聚合函数也可能出现NullPointerException异常。
这种情况 字段别名的双引号去掉;
select count(c.id) as "allnum",t.card_name as "name"
from t_car_inout c
left join (
......
) t on t.card_code = c.car_Type
GROUP BY name