2017-05-31 4 views
0

J'ai deux requêtes Mysql concernant le nombre d'utilisateurs:COUNT DISTINCT GROUP BY

premier serait comme:

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 

Et les résultats dans:

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

La seconde serait :

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 

et r Les résultats sont les suivants:

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 

etc., c'est-à-dire essentiellement l'id_utilisateur et le nombre de réservations. Je reçois 10768 lignes dans ce cas, c'est-à-dire 10768 user_id distinct (c'est pour avril seulement).

Comment se fait pour la requête du 1er avril renvoie 10993 user_id distinct (je pense) tandis que la deuxième requête renvoie 10768?

+0

Peut-être le nombre d'utilisateurs distincts ne croît pas beaucoup? Les résultats sont parfaitement raisonnables si l'on suppose que seulement 225 utilisateurs ont été ajoutés en dehors d'avril. Cela implique beaucoup de revisits/réutilisation. vous pouvez utiliser les deux requêtes sélectionnez d'abord où n'existe pas en deuxième et si vous obtenez 225, je pense que vous avez votre réponse. – xQbert

Répondre

1

Si dataZalozenia est une date/heure ou un horodatage, votre BETWEEN n'inclura pas la majorité des enregistrements de la date de fin; '2017-04-30' est traité comme '2017-04-30 00:00:00'.

+0

Ouais, ça a l'air d'arriver ... J'ai complètement oublié que c'est traité comme ça. Je vous remercie! – radek

+0

@radek Notez également que 'SELECT DISTINCT ... COUNT' n'est pas la même chose que' SELECT ... COUNT (DISTINCT' – Uueerdo

+0

) Je sais que je ressens la différence et que je devrais pouvoir l'utiliser correctement. avoir beaucoup de pratique mais difficile, merci encore. – radek