Maison >base de données >tutoriel mysql >Comment puis-je utiliser DISTINCT et ORDER BY ensemble dans une seule instruction SQL SELECT ?

Comment puis-je utiliser DISTINCT et ORDER BY ensemble dans une seule instruction SQL SELECT ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-07 09:16:41357parcourir

How Can I Use DISTINCT and ORDER BY Together in a Single SQL SELECT Statement?

Utilisation de DISTINCT et ORDER BY dans une seule instruction 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.

Énoncé du problème

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é.

Solution

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 :

  • MAX (CreationDate) est la fonction d'agrégation utilisée pour trier les résultats par la dernière date de création pour chaque catégorie.
  • GROUP BY Category regroupe les résultats par catégorie. colonne, permettant à DISTINCT de supprimer les valeurs de catégorie en double.
  • ORDER BY MAX(CreationDate) DESC, Category trie les résultats d'abord par la dernière date de création dans chaque catégorie, puis par ordre alphabétique selon le nom de la catégorie.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn