2014-09-02 117 views
1

下面的3個查詢中的每一個都會針對每個月創建的引號數量,吐出一系列的月份。數據庫中的每個報價都有一個與其關聯的用戶名,即該用戶的電子郵件地址。SQL - 爲什麼這3個查詢的結果不加起來?

我假設從查詢1開始的任何一個月的總數應該是「QUERY 2」中該月的數量加上「查詢3」中該月份的數字,但它們不會加起來。

例如,我本來以爲我得到這樣的:

QUERY NUMBER 1 
Aug 2013 -> 2836 

QUERY NUMBER 2 
Aug 2013 -> 2500 

QUERY NUMBER 3 
Aug 2013 -> 325 

所以2500(查詢號碼2)+ 325(查詢號碼3)= 2825,而不是2836(查詢號碼1) 和我不確定它爲什麼不給我2836

查看下面的查詢,爲什麼QUERY 2 + QUERY 3 = QUERY 1? 這裏只有一條線改變:

WHERE created_by_username = '[email protected]' 

//QUERY NUMBER 1 
SELECT DATE_FORMAT(created,'%b %Y'), 
     COUNT(DISTINCT username) 
FROM view_all_quotes 
GROUP BY DATE_FORMAT(created,'%b %Y') 
ORDER BY created ASC 

//QUERY NUMBER 2 
SELECT DATE_FORMAT(created,'%b %Y'), 
     COUNT(DISTINCT username) 
FROM view_all_quotes 
WHERE created_by_username = '[email protected]' 
GROUP BY DATE_FORMAT(created,'%b %Y') 
ORDER BY created ASC 

//QUERY NUMBER 3 
SELECT DATE_FORMAT(created,'%b %Y'), 
     COUNT(DISTINCT username) 
FROM view_all_quotes 
WHERE created_by_username <> '[email protected]' 
GROUP BY DATE_FORMAT(created,'%b %Y') 
ORDER BY created ASC 

對不起,我不能找到建議在這些帖子格式SQL的文檔。

+0

使用四個空格前綴SQL,或者選擇SQL行並按下Ctrl-K,或者選擇SQL行並從編輯器工具箱中選擇代碼 – Andomar 2014-09-02 16:07:16

+0

我的猜測是最後兩個查詢中存在「缺失」記錄, created_by_username'是'Null'。 – hardmath 2014-09-02 16:09:48

+0

我正在努力查明問題。 'GROUP BY DATE_FORMAT(創建'%b%Y')'有問題嗎?因爲當我刪除該行時,我返回的累計數字與最近6個月的每個累計數字不同(我限制了查詢只顯示我測試中的最後6個月)。 – Metzed 2014-09-02 16:33:55

回答

3

其中created_by_usernamenull的行將被where條款排除。

你可以找到這些行:

select * from view_all_quotes where created_by_username is null 
+0

我已更新查詢並再次運行它們,僅顯示過去6個月的結果(它們仍不合計)。然後,我爲這6個月運行了以下內容,返回了0個結果。其他事情能發生嗎? 'select * from view_all_quotes where created_by_username is null AND'2014-03-01'<= DATE_FORMAT(created,'%Y-%m-%d') AND'2014-09-01'> DATE_FORMAT(created,'' %Y-%m-%d')' – Metzed 2014-09-02 16:25:21

+0

也許它與'GROUP BY DATE_FORMAT(已創建,'%b%Y')'請參閱上面的評論... – Metzed 2014-09-02 16:34:21

+0

更新 - 我已經找出發生了什麼事並在原文中顯示了以下答案。感謝您的幫助@Andomar – Metzed 2014-09-02 17:30:33

0

當我寫我認爲錯誤是在我已經創造了查詢的問題。然而,自寫它以來,我發現查詢沒有任何問題,並且沒有任何記錄丟失。

但是,在查詢2和查詢3(正確)中出現少量用戶名,因此查詢1合併了這些用戶名,表示查詢1返回的值/結果小於查詢2 +查詢希望這是有道理的。對不起浪費任何人的時間。我在寫這個問題時沒有意識到答案只在我能看到的數據中。

再次感謝。

相關問題