这些天在研究 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
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
而第2个,要么是1,要么是 null 值
count 是不统计 null 值的,所以结果不一样是对的
如果要结果一样,你的第2个应该加 else 0
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;这个的情况,也是不一样....
我的代码里面的确有select ...语句 我把它省略了.完成的代码,我贴上去了.,我想计算的是 count数值,
那 count( if (,,)) 和 case( case when then end) ,这两个使用的过程中,有什么需要注意的么?
谢谢,似乎有点明白了.也就是说count(0)这样得出来的 结果也是1了.(是的,这个验证通过了)2.那么为什么在 sum上面的出来的结果也不一样的? 通过count( if (,,)) 和 case( case when then end) 这 两个