2015-05-16 104 views
0

我試圖計算配置文件訪問的次數,但它計算錯誤的數字。在下面的例子中,應該有3次訪問,但它計數爲6!任何人都知道它有什麼問題嗎? http://sqlfiddle.com/#!9/b43ea/8SQL - COUNT()計算錯誤的數字

SELECT *, 
COUNT(profile_visitors.profile_id) AS visitorCount 
FROM profile_visitors 
LEFT JOIN user_login ON user_login.user_id = profile_visitors.user_id 
WHERE profile_visitors.user_id = 1 
+1

你有兩列在表USER_LOGIN USER_ID = 1,所以在連接後,你將有2 * 3 = 6行。也許user_login表的第二行是爲了保存另一個user_id? – jpw

+0

你的sql小提琴有錯誤的數據表user_login .....它有重複的用戶ID兩次 – HaveNoDisplayName

+0

爲什麼你需要加入登錄表來獲取個人資料訪問的次數?您只能從profile_visitors中完全獲得總計數或每位用戶數。如果要用計數顯示用戶信息,則需要先進行分組,稍後再加入用戶表(而不是user_login表)。 – Tim3880

回答

1

您需要集團通過數多行,所以坐天星出你的查詢,並通過USER_ID添加組也使其profile_visitors。*

+0

儘管這是一個很好的建議(除了最後一部分)它不會解決由重複數據造成的問題。 – jpw

+0

你可以在這裏執行你的查詢:http://sqlfiddle.com/#!9/b43ea/8 –

+1

@jpw: - 我認爲OP在將數據放在表user_login中時出現了錯字,其中OP錯誤地將userid兩次 – HaveNoDisplayName

0

可以使用WHERE IN()如果比較存在於user_login

SELECT *, 
COUNT(profile_visitors.user_id) AS visitorCount 
FROM profile_visitors 
WHERE profile_visitors.user_id IN (SELECT user_id FROM user_login) 

結果:

id user_id profile_id   visit_date    visitorCount 
1 1    1   May, 10 2015 15:26:46   3 
+1

哦,_try this_是一個很好的解釋:) – dbf

+0

讓我們希望OP不使用MySQL版本> = 5.7.5,這會導致此查詢失敗,因爲它依賴於在後續版本中已禁用的非標準行爲。 – jpw

+1

@DyrandzFamador它在當前的通用可用版本中工作,儘管沒有問題,但它可能在未來。本手冊的相關部分供參考:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html – jpw

1

LEFT JOIN到user_login表對此問題沒有任何好處,但是,以下查詢會爲您提供想要查看的詳細信息(假設您只想查看user_id = 1的訪問次數):

SELECT COUNT(profile_visitors.profile_id) AS visitorCount 
FROM profile_visitors 
WHERE profile_visitors.user_id = 1 
GROUP BY profile_visitors.profile_id 

要查看配置文件使用的所有訪問:

SELECT profile_id, COUNT(profile_visitors.profile_id) AS visitorCount 
FROM profile_visitors 
GROUP BY profile_visitors.profile_id 
+0

謝謝,你的snippit結合使用DISTINCT的jpw的snippit解決了這個問題。感謝eveybody的幫助! – GeenId