2017-05-31 250 views
0

我有一個關於用戶數量兩個My​​SQL查詢:COUNT DISTINCT與GROUP BY

首先會是這樣:

SELECT 
date_format(r.dataZalozenia,'%Y-%m') as rok_miesiac, 
count(distinct r.idUsera) as liczba_buyers 

FROM 
rezerwacje r 

WHERE 
r.dataZalozenia >= '2017-01-01' 
and r.status = 'zabookowana' 

GROUP BY 
1 

和結果:

"rok_miesiac" "liczba_buyers" 
"2017-01" "12862" 
"2017-02" "10208" 
"2017-03" "10189" 
"2017-04" "10993" 
"2017-05" "10705" 

第二是:

SELECT DISTINCT 
r.idUsera, 
count(r.idUsera) as l_reze 

FROM 
rezerwacje r 

WHERE 
r.dataZalozenia between '2017-04-01' and '2017-04-30' 
and r.status = 'zabookowana' 

GROUP BY 
r.idUsera 

ORDER BY 
l_reze DESC 

And r結果在:

idUsera l_reze 
516287 8 
2495710 6 
2195860 6 
645233 5 
98308 5 
543007 5 
1464142 5 
3461665 5 
3443141 5 
3818844 4 
2305130 4 

等等,即基本上user_id和保留數量。在這種情況下,我得到了10768行,即10768不同的user_id(這僅限於4月份)。

爲什麼4月1日的查詢返回10993不同user_id(我認爲),而第二個查詢返回10768?

+0

也許不同的用戶數量增長不那麼多?如果我們假設在四月以外只有225個用戶,結果是非常合理的。這意味着很多重訪/重用。你可以同時使用兩個查詢,從第一個不存在於第二個的地方開始,如果你得到了225我認爲你有你的答案。 – xQbert

回答

1

如果dataZalozenia是日期時間或時間戳,則BETWEEN將不包括結束日期的大部分記錄; '2017-04-30'被視爲'2017-04-30 00:00:00'。

+0

是的,這似乎是現場..我完全忘了,這是對待這樣的。謝謝! – radek

+0

@radek另請注意,'SELECT DISTINCT ... COUNT'和'SELECT ... COUNT(DISTINCT' – Uueerdo

+0

)是不一樣的,我知道,我感覺不同,我應該可以正確使用它。有很多練習很難,再次感謝。 – radek