这些天在研究 mysql(小白一只,多多照顾),发现
count(if(((i.qstatus = K_ITEM_STATUS_APPLYING) OR (i.qstatus = K_ITEM_STATUS_COMMIT)), 1, 0))

count(CASE i.qstatus  WHEN K_ITEM_STATUS_APPLYING THEN 1 WHEN K_ITEM_STATUS_COMMIT  THEN 1 END)
得到的结果,居然不一样,请大神帮助讲解,谢谢
mysql 5.6

解决方案 »

  1.   

    楼主可以尝试select count(0) from table1  看看结果为什么不是预期的。
      

  2.   

    不一样是对的,你的第一个 count 里面的表达式,结果要么是1,要么 是0
    而第2个,要么是1,要么是 null 值
    count 是不统计 null 值的,所以结果不一样是对的
    如果要结果一样,你的第2个应该加 else 0
      

  3.   

     /*这句代码有问题,但是现在没有看出来,
               SELECT sum(if((i.qstatus <> K_ITEM_STATUS_DELETE), i.qbudget, 0)),
               sum(if((i.qstatus = K_ITEM_STATUS_APPLYING), i.qbudget, 0)),
               count(if(((i.qstatus = K_ITEM_STATUS_END)), 1, 0)),
               count(if(((i.qstatus = K_ITEM_STATUS_APPLYING)), 1, 0))*/
              SELECT
                sum(CASE i.qstatus
                    WHEN K_ITEM_STATUS_END
                      THEN i.qreturn
                    WHEN K_ITEM_STATUS_AGREE
                      THEN i.qbudget
                    WHEN K_ITEM_STATUS_COMMIT
                      THEN i.qbudget
                    WHEN K_ITEM_STATUS_REFUSE
                      THEN i.qbudget
                    WHEN K_ITEM_STATUS_ARGUMENT
                      THEN i.qbudget
                    END),
                sum(CASE i.qstatus
                    WHEN K_ITEM_STATUS_APPLYING
                      THEN i.qbudget END),
                COUNT(CASE i.qstatus
                      WHEN K_ITEM_STATUS_END
                        THEN 1 END),
                COUNT(CASE i.qstatus
                      WHEN K_ITEM_STATUS_APPLYING
                        THEN 1 END)
              INTO m_applyed, m_applying, m_ccount, m_acount
              FROM (appbusi_items i LEFT JOIN appbusi_members m ON ((m.id = i.qmember_id)))
              WHERE m.qactivity_id = m_qaid
              GROUP BY m.qactivity_id;这个的情况,也是不一样....
      

  4.   


    我的代码里面的确有select ...语句 我把它省略了.完成的代码,我贴上去了.,我想计算的是 count数值,
    那 count( if (,,)) 和 case( case when then end) ,这两个使用的过程中,有什么需要注意的么?
      

  5.   


    谢谢,似乎有点明白了.也就是说count(0)这样得出来的 结果也是1了.(是的,这个验证通过了)2.那么为什么在 sum上面的出来的结果也不一样的? 通过count( if (,,)) 和 case( case when then end)  这 两个