发现问题:
在用到if函数的时候,qiu4_others总是没跑出数据来,代码如下:
SELECT count(if(c.parentid is NOT NULL,c.parentid,NULL)) AS qiu4_qiu3,
count(if(c.parentid is NULL,c.parentid,NULL)) AS qiu4_others,
count(if(b.parentid is NOT NULL AND c.parentid is NOT NULL,b.parentid,NULL)) AS qiu4_qiu3_qiu5,
count(if(b.parentid is NOT NULL AND c.parentid is NULL,b.parentid,NULL)) AS qiu4_others_qiu5
FROM
(
SELECT DISTINCT parentid
FROM fdm.fdm_mongo_study_group_student_ref_new_chain
WHERE dp = 'ACTIVE'
AND studylessonid in (3111,3121,3131,3141,3151,3161,4510,5510) ----秋4
)a
LEFT JOIN
(
SELECT DISTINCT parentid
FROM fdm.fdm_mongo_study_parent_join_ref_new_chain
WHERE dp = 'ACTIVE'
AND studylessonid in (3411,3421,3436,3441,3451,3461,16001,17001) ---秋5
)b ON a.parentid = b.parentid
LEFT JOIN
(
SELECT DISTINCT parentid
FROM fdm.fdm_mongo_study_group_student_ref_new_chain
WHERE dp = 'ACTIVE'
AND studylessonid in (3410,3420,3430,3440,3450,3460,4410,5410) ---秋3
)c ON a.parentid = c.parentid
找原因:
按照这个说明来看,如果不是null,那么就返回“c.parentid”这个值,并且count对“c.parentid”这个值进行计数,怎么就不行呢?然后去了百度等相关搜索查阅,没有所以然。
总结了可能导致问题的2个原因:
1.IF中,不能用“c.parentid is NULL”;
2.“c.parentid”计数出现了问题。
image.png
期间,我还把“c.parentid”改成了其他值,跑的时候直接报错,如下:
count(if(c.parentid is NULL,a.parentid,NULL)) AS qiu4_others,
资料上显示是可以返回其他值的啊?一定是哪里错了,于是加上了‘’试了试,发现,妥了.....
小结:
IF函数,返回的是“c.parentid”代表的值,本case中,“c.parentid”代表的值是null,所以count(null)当然是0,这也说明了,为什么其他3个数据都没问题,唯独这一个有问题。
ps:IF里面也可以用and逻辑关系,网上没有求证,于是试着跑了下,结果是正确的。
网友评论