SQL中IF函数使用方法

发现问题:

在用到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”计数出现了问题。

《SQL中IF函数使用方法》 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逻辑关系,网上没有求证,于是试着跑了下,结果是正确的。

    原文作者:Jerry_ZJY
    原文地址: https://www.jianshu.com/p/73a19f7df5f3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞