mysql sélectionner les valeurs top n max
Comment pouvez-vous sélectionner les meilleurs n max des valeurs d'une table?
Pour un tableau comme ceci:
column1 column2
1 foo
2 foo
3 foo
4 foo
5 bar
6 bar
7 bar
8 bar
Pour n=2, le résultat doit être:
3
4
7
8
L'approche ci-dessous sélectionne uniquement la valeur maximale pour chaque groupe.
SELECT max(column1) FROM table GROUP BY column2
Retourne:
4
8
source d'informationauteur Gabriel Diaconescu | 2011-05-19
Vous devez vous connecter pour publier un commentaire.
Pour n=2 vous pourriez
pour tout n vous pouvez utiliser des approches décrites ici pour simuler rang sur la partition.
EDIT:
En fait cette article va vous donner exactement ce dont vous avez besoin.
Fondamentalement, c'est quelque chose comme cela
Remplacer
grouper
avec le nom de la colonne que vous souhaitez regrouper etval
avec le nom de la colonne qui détiennent les valeurs.De travailler exactement comment elle fonctionne, aller étape par étape à partir de le plus à l'intérieur de la requête et de les exécuter.
Aussi, il y a une légère simplification - la sous-requête qui recherche les
mid
peut retourner la valeur NULL si certaines catégories n'ont pas assez de valeurs donc il devrait y avoir FUSIONNENT pour certains constante qui aurait du sens dans la comparaison (dans votre cas, il serait MIN de domaine du val, dans l'article c'est MAX).EDIT2:
J'ai oublié de mentionner que c'est la LIMITE de 2,1 qui détermine la n (LIMITE n,1).
Si vous utilisez mySQl, pourquoi n'utilisez-vous pas la LIMITE de la fonctionnalité?
Trier les enregistrements par ordre décroissant et limiter la n c'est à dire :
C'est la façon dont je suis le N max de lignes par groupe dans MySQL
comment cela fonctionne:
co.country = ci.country
) < 1
donc pour 3 éléments - ) < 3co.id < ci.id
Exemple complet ici:
mysql, sélectionnez n max valeurs par groupe/
mysql select max et retourner plusieurs valeurs
Remarque: ayez à l'esprit que des contraintes supplémentaires comme le sexe = 0 doit être fait dans les deux endroits. Donc, si vous voulez obtenir les mâles seulement, alors vous devez appliquer une contrainte à l'intérieur et l'extérieur sélectionnez
À partir de
MySQL 8.0/MariaDB
soutien les fonctions de la fenêtre qui sont conçus pour ce genre d'opérations:DB-Fiddle.com Démo