6
votes

Comptez les 10 meilleures valeurs survenant dans une colonne de MySQL

J'ai une colonne dans la table MySQL qui a le type de données INT (11).

Comment puis-je rechercher pour obtenir les 10 meilleures valeurs les plus performantes dans cette colonne?


0 commentaires

4 Réponses :


2
votes

Essayez:

SELECT ColName, Count(1) AS occurances
    FROM
        table
    GROUP BY
        ColName
    ORDER BY
        occurances DESC
    LIMIT
        10


0 commentaires

29
votes
SELECT col, count(*)
    FROM tablethingie
    GROUP BY col
    ORDER BY count(*) DESC
    LIMIT 10

4 commentaires

Marqué ma réponse pour Supprimer (-: Est-il possible d'utiliser le nombre (col) plutôt que de compter (*)? Hmm, et qui est plus efficace ...


Ok, je suppose que vous avez été le premier à altérer le mysql :-), je supprime mon ainsi et votez celui-ci.


Le nombre (COL) comptera les valeurs non nulles. Depuis que Col est ce que nous collectons, c'est la même chose, de toute façon. Compte () équivaut à compter (1), mais est généralement recommandé sur ce dernier. Le nombre () est censé être le plus efficace de tous tant que c'est exactement ce dont vous avez besoin.


Peter, mysql courses! ;-) Mais que voulez-vous dire "alter"? La seule chose que j'ai modifiée lors de la modification de la réponse était la mise en forme, IIRC.



3
votes

haut est un mot clé qui n'est pas pris en charge dans MySQL, c'est dans MSSQL.

Cette requête suivante doit faire ce que vous voulez (non testé, mais l'idée devrait devenir claire): P>

SELECT column, COUNT(*) AS matches 
FROM table 
GROUP BY column 
ORDER BY matches DESC 
LIMIT 10


5 commentaires

Voté à la hausse pour contrer le vote en direct; Étant donné que je peux le dire, votre réponse est également valable à tous les autres. Je souhaite que les électeurs de descente expliquent leurs votes d'avance, cependant. De cette façon, nous pouvons apprendre quelque chose.


Ricebowl, cela l'expliquerait-il? - Stackoverflow.com/revisions/1831456/List - La réponse a été modifiée pour imiter les autres après avoir été évité ;-)


En effet, parce que j'ai vu une erreur dans ma réponse, alors je l'ai corrigé. De cette façon, il existe des réponses correctes et non de non-fonctionnement. Garder une grande qualité des réponses à une question.


Ben Fransen, je ne pense pas que vous ayez fait quelque chose de gravement faux. Il est plus courant de supprimer votre réponse et de uppoter le bon, mais votre comportement n'est en aucun cas criminel ;-) C'est juste qu'il explique le bowvote. (qui était la mienne et je l'ai révoquée).


@hacker, qui explique, mais un commentaire expliquant le vote en direct aurait été plus rapide. ...Ouais; Je suis peut-être paresseux dans mes vieilles âge =)



4
votes

Essayez le code suivant

SELECT colname, COUNT(*) AS cnt
FROM tablename
GROUP BY colname
ORDER BY cnt DESC
LIMIT 10


0 commentaires