2017-05-31 128 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