MySQL GROUP BY et HAVING
Je suis groupement mes résultats basés sur une colonne X et je veux retourner les lignes qui a la plus haute de la Colonne Y de la valeur du groupe.
SELECT *
FROM mytable
GROUP BY col1
HAVING col2 >= (SELECT MAX(col2)
FROM mytable AS mytable2
WHERE mytable2.col1 = mytable.col1 GROUP BY mytable2.col1)
Je veux optimiser la requête ci-dessus. Est-ce faisable sans les sous-requêtes?
J'ai trouvé la solution et c'est plus simple que vous le pensez:
SELECT * FROM (SELECT * FROM mytable ORDER BY col2 DESC) temp GROUP BY col1
S'exécute en 5 millisecondes sur 20 000 lignes.
source d'informationauteur Elie
Vous devez vous connecter pour publier un commentaire.
À l'aide d'un dérivé de la table/vue intégrée pour une JOINTURE:
Être conscient que ce sera dupliquer
x
enregistrements si il n'y a plus d'une relativey
enregistrement. Pour supprimer les doublons, l'utilisationDISTINCT
:La suite n'est pas testée, mais ne reviendra pas de doublons (en supposant valide):
Votre Col2 jamais > alors MAX(col2) donc je vous suggérons d'utiliser col2 = MAX(col2)
VOICI donc la REQUÊTE