2013-03-22 89 views
1

我試圖獲取每個用戶在changes_cc表中的條目數量列表。並非所有用戶都已輸入內容,但由於某些原因,每個擁有0個輸入項的用戶都返回「1」。我假設這是因爲它正在計算JOIN ed表中的條目。我怎樣才能讓它變成「0」呢?將RIGHT JOIN和COUNT結合

SELECT COUNT(*) as num, users.id, realname, username 
      FROM changes_cc 
      RIGHT JOIN users 
       ON changes_cc.user_id = users.id 
      GROUP BY users.id 
+0

嘗試使用內部連接代替 – 2013-03-22 02:40:29

+1

@JohnConde只會顯示具有條目的用戶。 – Mike 2013-03-22 02:41:21

+1

感謝您的所有答案。他們都很好。我將不得不使用「eenie meenie miney moe」來決定接受誰;) – Mike 2013-03-22 02:43:49

回答

3

我認爲這應該工作 - 算在changes_cc表中的特定字段VS計數*:

SELECT u.id, realname, username, COUNT(c.id) as num 
FROM users u 
    LEFT JOIN changes_cc c 
     ON u.user_id = c.id 
GROUP BY u.id 

我喜歡讀LEFT JOINRIGHT JOIN,但他們都OUTER JOINs和工作相同。

+1

我使用了與您所建議的相同的查詢,但此查詢只返回兩個表中的匹配數據。 其實,我想從用戶表中的所有數據和更改的計數,如果某些用戶沒有計數,也是我想要的記錄。 – 2016-12-29 06:52:30

2

你不應該使用COUNT(*)罪名包括空值記錄),因爲它通常會給予ATLEAST 1,因爲它來自右表返回所有記錄。如果指定要計算的列名稱,則會向您提供所需的結果,因爲COUNT僅計數爲NON_NULL值。

SELECT COUNT(changes_cc.user_id) as num, 
     users.id, 
     realname, 
     username 
FROM changes_cc 
     RIGHT JOIN users 
      ON changes_cc.user_id = users.id 
GROUP BY users.id 
1

而不是使用count(*),請使用count(changes_cc.user_id)

問題是,您正在對行進行計數(使用*)而不是對「右連接」表中的非NULL值進行計數。