鍍金池/ 問答/數(shù)據(jù)庫/ mysql在count時帶有l(wèi)eft join和group by,如何讓coun

mysql在count時帶有l(wèi)eft join和group by,如何讓count為0的結(jié)果顯示0

SELECT COUNT(*)AS cnt FROM info AS i LEFT JOIN user AS u ON i.grpid=u.grpid WHERE i.type=1 GROUP BY i.grpid

這樣查詢出來的沒有結(jié)果的數(shù)據(jù)不顯示,想讓沒有結(jié)果的數(shù)據(jù)顯示為0怎么做?

回答
編輯回答
亮瞎她

你可以使用 MYSQL IF()Function

SELECT IF(SELECT COUNT(*)AS cnt FROM info AS i LEFT JOIN user AS u ON i.grpid=u.grpid WHERE i.type=1 GROUP BY i.grpid) = 0 , "0", SELECT COUNT(*)AS cnt FROM info AS i LEFT JOIN user AS u ON i.grpid=u.grpid WHERE i.type=1 GROUP BY i.grpid) AS cnt;

以下是IF 的 Syntax

   IF(condition, value_if_true, value_if_false)
2017年1月21日 00:56
編輯回答
黑與白

想讓沒有結(jié)果的數(shù)據(jù)為 0 可以使用 mysql 的 if 操作。當(dāng)然,建議由程序來做。

2017年6月23日 07:17
編輯回答
薔薇花

我猜你需要把info和user的join順序調(diào)換一下

2018年2月4日 00:20
編輯回答
拮據(jù)

瀉藥,沒看出來你這sql哪里會有空值呢?
左連接、where過濾左表字段、groupby也是左表、取count
過濾到的記錄肯定count也不為0

然后說一下空值處理用ifnull(col1,0)即可

2018年7月22日 05:01
編輯回答
陪她鬧

用if把你想要讓他變成0的字段設(shè)置一個默認值0

2017年5月15日 15:08
編輯回答
過客

順序改為先from user再left join info表。
SELECT COUNT(i.id) AS cnt FROM user AS u LEFT JOIN info AS i ON i.grpid=u.grpid WHERE i.type=1 GROUP BY i.grpid

原因是user表有的記錄,info不一定有;
這樣查詢的時候會先把user表的全查出來,再去找user對應(yīng)的info記錄總數(shù)。
按照你的寫法,如果一個user沒有info記錄,就沒有可以顯示的內(nèi)容了

2018年1月14日 10:19