J'essaie de trouver une requête MySQL qui trouvera des valeurs DISTINCT dans un champ particulier, compte le nombre d'occurrences de cette valeur, puis ordonne les résultats par le nombre.
exemple db
id name
----- ------
1 Mark
2 Mike
3 Paul
4 Mike
5 Mike
6 John
7 Mark
résultat attendu
name count
----- -----
Mike 3
Mark 2
Paul 1
John 1
count(*) > 1
dans unewhere
clause car c'est une fonction d'agrégation. Vous obtenez également un message très inutile: «Utilisation non valide de la fonction de groupe». La bonne manière est d'alias le comptename,COUNT(*) as cnt
et ajouter une clause ayant comme ceci:HAVING count > 1
.HAVING
pour les conditions qui doivent être appliquées après l'agrégation, alors queWHERE
pour les conditions qui doivent être appliquées avant. (Une autre façon de penser est celle quiWHERE
s'applique aux données de ligne d'origine;HAVING
s'applique aux données de ligne de sortie.)Et quelque chose comme ça:
Vous sélectionnez le nom et le nombre de fois qu'il apparaît, mais en le regroupant par nom, chaque nom n'est sélectionné qu'une seule fois.
Enfin, vous commandez par le nombre de fois dans l'ordre décroissant, pour que les utilisateurs les plus fréquents viennent en premier.
la source
SELECT COUNT(DISTINCT name) as count FROM your_table
Pour un décompte du nombre total de lignes de la table, faites la requête de Pascal sans l'group by
instruction.Nous venons de changer COUNT (*) d'Amber en COUNT (1) pour de meilleures performances.
la source