Maison >base de données >tutoriel mysql >Comment puis-je utiliser DISTINCT et ORDER BY ensemble dans une seule instruction SQL SELECT ?
Lorsque vous travaillez avec des requêtes SQL, il peut être souhaitable à la fois de supprimer les valeurs en double à l'aide de DISTINCT et de trier les résultats à l'aide de COMMANDER PAR. Cependant, tenter d’utiliser ces clauses ensemble dans une seule instruction peut entraîner un comportement inattendu. Cet article abordera ce problème et fournira une solution pour réaliser correctement le filtrage et le tri.
Considérez la requête suivante :
SELECT Category FROM MonitoringJob ORDER BY CreationDate DESC;
Cette requête renverra résultats classés par la colonne CreationDate par ordre décroissant. Cependant, s'il y a des valeurs en double dans la colonne Catégorie, elles ne seront pas supprimées.
Pour supprimer les doublons, on peut essayer d'utiliser le mot-clé DISTINCT :
SELECT DISTINCT Category FROM MonitoringJob ORDER BY CreationDate DESC;
Cependant, cette requête échoue avec une erreur, car ORDER BY n'est pas autorisé sur les colonnes non agrégées lorsque DISTINCT est utilisé.
Pour résoudre ce problème, utilisez une fonction d'agrégation avec une clause GROUP BY pour regrouper les résultats par colonne Catégorie. Cela permettra au mot clé DISTINCT de supprimer les valeurs de catégorie en double tout en permettant à la clause ORDER BY de trier les résultats par la colonne CreationDate.
SELECT DISTINCT Category, MAX(CreationDate) FROM MonitoringJob GROUP BY Category ORDER BY MAX(CreationDate) DESC, Category;
Dans cette requête :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!