MySQL: “afin de” à l'intérieur de “groupe”
J'ai une table MySQL de names
, qui se compose de deux champs: name
et rank
. Le name
valeur n'est pas unique peut avoir plusieurs matchs.
Le problème: je veux sélectionner des enregistrements, regroupés par name
, mais si il y a plus d'un name
, celui avec la plus haute rank
doivent être prises.
Un exemple:
Tom 2
Ben 1
Ben 2
SÉLECTIONNEZ * À PARTIR DE
names
GROUPE PARname
COMMANDE PARrank
DESC
Renvoie généralement:
Tom 2
Ben 1
J'ai besoin de:
Tom 2
Ben 2
Puisqu'il y a deux Bens, mais la seconde avec un rang plus élevé.
Il me semble que MySQL groupement prend le nom de la première et ignore le reste.
Comment puis-je commander les documents à l'intérieur de "groupe", pour que je puisse dire qui d'enregistrement doivent être prises, si il n'y a plus d'un avec le même name
?
OriginalL'auteur krn | 2011-03-19
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'un fonction d'agrégation appelé
max
:De cette façon, vous permettra de récupérer tous les noms distincts, chacune associée à son niveau maximum.
group by name
de sorte que lemax(rank)
parname
est retourné, et non de l'ensemble dumax(rank)
.oui. déjà ajouté à la partie. oublié avec la ruée vers la question à la première. 🙂
Cela donne les lignes où chaque nom a le rang maximal, ce que vous voulais seulement le nom qui avait le rang maximal?
OriginalL'auteur Pablo Santa Cruz
Pour moi, il a été travaillé:
De prendre la dernière rangée à l'intérieur d'un groupe:
select *
alors quegroup by name
)Je suppose que vous n'avez pas essayer de le faire, parce que, si vous aviez essayé, vous auriez su qu'il fonctionne. Pas seulement sur cet exemple, mais vous pouvez également obtenir toutes les informations dans le max ligne ligne.
+1, je ne savais pas que
mysql
prend en charge une telle syntaxe.MSSQL
etOracle
ne pas...OriginalL'auteur Roger Russel
Utilisation
max()
:OriginalL'auteur Dennis Benzinger