Comment trier des valeurs dans un ordre spécifique en SQL (2024)

Parfois, vous devrez ordonner vos données d'une manière particulière, et souvent l'utilisation des modificateurs de tri typiques comme ASC et DESC ne suffit pas. Cet article vous montrera comment utiliser l'instruction CASE pour ordonner vos données exactement comme vous le souhaitez.

Avez-vous déjà eu besoin d'ordonner vos données d'une manière très spécifique ? L'une des meilleures méthodes pour gérer les tris complexes est d'utiliser CASE. L'instruction CASE est très utile, car elle vous permet d'ajouter une logique if-else à vos requêtes. Nous utiliserons cette logique pour SQL ORDER BY des valeurs spécifiques. Vous pouvez en savoir plus sur l'instruction CASE en lisant cet article qui explique CASE tout en montrant des exemples utiles.

Nous allons démontrer cette commande SQL personnalisée en passant en revue 3 exemples distincts, impliquant différents types de données comme des entiers, des valeurs de texte et des dates.

Pour nos exemples, nous allons utiliser la table orders table. Cette table contient des informations sur les commandes de produits que notre entreprise a reçues.

orders

idlocationcountorder_date
1New York132021-05-21
2Boston212020-11-12
3Chicago42021-03-18
4Toronto102019-12-13
5New York202020-01-27
6Boston332019-04-03
7Memphis72021-05-04
8Cleveland182020-07-06
9Philadelphia62019-04-22
10Washington352021-01-07

Tri personnalisé basé sur une colonne d'entiers

Notre responsable nous a indiqué comment il souhaitait que ces données soient classées. Notre résultat doit respecter les règles suivantes :

  • D'abord, afficher les commandes pour lesquelles entre 10 et 20 articles ont été commandés.
  • Ensuite, afficher les commandes pour lesquelles moins de 10 articles ont été commandés.
  • Enfin, afficher les commandes pour lesquelles plus de 20 articles ont été commandés.

Les exigences sont assez claires, mettons-nous au travail ! Après un certain temps, nous avons produit la requête SQL suivante :

SELECT id, countFROM ordersORDER BY CASE WHEN count BETWEEN 10 AND 20 THEN 1 WHEN count < 10 THEN 2 ELSE 3END

Décomposons-la.

Nous sélectionnons le site id et le nombre de commandes à afficher. Ensuite, nous entrons directement dans l'ordre de nos résultats en utilisant la clause ORDER BY.

Vous pouvez utiliser CASE pour spécifier une clé de tri dans la clause ORDER BY, ce qui est exactement ce que nous faisons ici. Nous donnons au premier cas une valeur de clé de tri de 1 :

CASE WHEN count BETWEEN 10 AND 20 THEN 1

Nous donnons au deuxième cas une valeur de clé de tri de 2 :

WHEN count < 10 THEN 2

Cela garantit que les résultats du premier cas seront affichés avant ceux du deuxième cas. Les dernières données que nous voulons afficher sont celles où le nombre de commandes est supérieur à 20. Nous pouvons leur attribuer une valeur de clé de tri de 3 : :

ELSE 3

Très bien, exécutons notre requête ! Nous obtenons les enregistrements suivants :

idcount
113
410
520
818
34
77
96
221
633
1035

Ça a marché ! Les articles dont le nombre de commandes est compris entre 10 et 20 sont affichés en premier. Viennent ensuite les commandes où 10 articles ont été commandés. Et enfin, les commandes dont le nombre d'articles est supérieur à 20 sont affichées.

Il s'agit d'une utilisation très avancée de CASE. Vous pouvez également utiliser l'instruction CASE avec des commandes de modification des données telles que INSERT et UPDATE. Consultez cet article de blog sur le sujet si vous souhaitez en savoir plus.

Tri personnalisé basé sur une colonne de texte

Examinons un autre exemple, sauf que cette fois, nous utiliserons une colonne de texte pour spécifier l'ordre dans lequel nos données doivent apparaître.

Notre patron vient de nous dire que nous devons afficher certaines des données de notre table et les trier en fonction du lieu. orders tableau et les trier en fonction du lieu où la commande a été passée.

Ils veulent voir d'abord les commandes de New York, puis celles qui ont eu lieu à Boston, et enfin celles de Toronto. Le reste des données relatives aux commandes doit également être affiché, mais l'ordre n'a pas d'importance pour les autres lieux. Mettons-nous au travail.

Nous sommes arrivés à la requête suivante :

SELECT id, location, count, order_dateFROM ordersORDER BY CASE WHEN location = 'New York' THEN 1 WHEN location = 'Boston' THEN 2 WHEN location = 'Toronto' THEN 3 ELSE 4 END

Cette fois, nous sélectionnons toutes les colonnes. L'utilisation de ORDER BY et CASE est similaire à notre exemple précédent.Si vous voulez en savoir plus sur ce sujet, consultez cet article qui couvre largement les types de données SQL.

Notez que l'ordre que nous avons utilisé dans notre expression CASE WHEN correspond exactement à nos exigences, montrant New York, Boston, puis Toronto. Exécutons cette requête et voyons si nous avons réussi.

idlocationcountorder_date
1New York132021-05-21
5New York202020-01-27
2Boston212020-11-12
6Boston332019-04-03
4Toronto102019-12-13
3Chicago42021-03-18
8Cleveland182020-07-06
7Memphis72021-05-04
9Philadelphia62019-04-22
10Washington352021-01-07

C'est un succès ! C'est exactement comme cela que nous voulons que nos données soient ordonnées. Nous pouvons maintenant passer à notre dernier exemple. Jusqu'à présent, nous avons travaillé avec des types de données numériques et textuelles.

Tri personnalisé basé sur la colonne Date

Pour notre dernier exemple, nous allons utiliser le type de données date et montrer comment incorporer des valeurs de date dans vos tris personnalisés CASE.

Une autre demande nous est parvenue de notre responsable. Il souhaite que les données soient affichées dans un certain ordre en fonction de la colonne date, order_date. Voici ce qu'on nous a dit :

  • Affichez toutes les commandes de l'année en cours (2021) et triez ces dates par le mois et le jour du mois dans l'ordre croissant.
  • Ensuite, affichez les dates des années précédentes, et triez-les également par le jour et le mois.

Écrivons notre requête et exécutons notre dernier exemple de SQL ORDER BY CASE.

SELECT id, location, count, order_dateFROM ordersORDER BY CASE WHEN EXTRACT(YEAR FROM order_date) = EXTRACT(YEAR FROM CURDATE()) THEN 1 WHEN EXTRACT(YEAR FROM order_date) = (EXTRACT(YEAR FROM CURDATE()) - 1) THEN 2 ELSE 3 END ASC, order_date ASC

Il y a beaucoup de choses à décomposer ici ! Entrons dans le vif du sujet. Examinez l'extrait suivant :

CASE WHEN EXTRACT(YEAR FROM order_date) = EXTRACT(YEAR FROM CURDATE()) THEN 1

EXTRACT est utilisé pour obtenir l'année à partir de la date de la commande. CURDATE() est utilisé pour obtenir la date actuelle. Vous pouvez voir d'autres fonctions comme celles-ci dans ce cours sur les fonctions standard SQL qui vous apprend à traiter des données numériques, textuelles et autres avec les fonctions SQL les plus utilisées.

Nous comparons l'année de order_date à l'année de la date actuelle. Nous faisons apparaître cet ensemble de données en premier en définissant la clé de tri sur 1.

WHEN EXTRACT(YEAR FROM order_date) = (EXTRACT(YEAR FROM CURDATE()) - 1) THEN 2

Cette opération est similaire à la section précédente, sauf que nous utilisons la date de l'année précédente (YEAR FROM CURDATE()) - 1).

Enfin, nous faisons apparaître le reste des résultats à l'aide de cet extrait :

ELSE 3

Cette fois, nous avons également trié par order_date ASC. Cela garantit que les mois et les jours de ce mois sont triés dans l'ordre croissant.

Voyons le résultat de l'exécution de cette requête :

idlocationcountorder_date
10Washington352021-01-07
3Chicago42021-03-18
7Memphis72021-05-04
1New York132021-05-21
5New York202020-01-27
8Cleveland182020-07-06
2Boston212020-11-12
6Boston332019-04-03
9Philadelphia62019-04-22
4Toronto102019-12-13

Nos résultats apparaissent exactement comme nous le souhaitons ! Les dernières années apparaissent en premier, et chaque ensemble de résultats par année est trié par les mois et les jours de cette année.

SQL ORDER BY Valeurs spécifiques

Voilà qui conclut notre examen des tris personnalisés. Nous avons augmenté la complexité de chaque tri au fil des exemples. À ce stade, vous devriez être en mesure d'appliquer les principes de cet article à un problème auquel vous êtes peut-être confronté. Si vous souhaitez voir d'autres exemples, consultez cet article de blog sur le tri d'enregistrements à l'aide de la clause ORDER BY. Il s'agit d'un sujet SQL assez avancé. Pour voir d'autres problèmes SQL avancés, consultez cette piste d'apprentissageSQL avancé de LearnSQL.fr.

Comment trier des valeurs dans un ordre spécifique en SQL (2024)

FAQs

Comment trier des valeurs dans un ordre spécifique en SQL? ›

Pour trier des données textuelles par ordre alphabétique à l'aide de la clause SQL ORDER BY, tu peux utiliser les mots-clés ASC (ascendant) ou DESC (descendant), qui trieront les données par ordre alphabétique (A-Z) ou par ordre alphabétique inverse (Z-A), respectivement.

Comment trier les données en SQL ? ›

Tri des résultats

Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou décroissante. Le classem*nt se fait sur des nombres ou des chaines de caractères.

Quand utiliser ORDER BY ? ›

La clause ORDER BY vous permet de le faire en spécifiant une liste de colonnes ; il suffit de séparer les noms des colonnes par des virgules. Vous pouvez utiliser les mots-clés ASC ou DESC (si vous le souhaitez) avec chaque colonne pour trier cette colonne dans l'ordre croissant ou décroissant.

Quelle fonction SQL qui permet d'afficher les éléments selon l'ordre ? ›

La commande ORDER BY permet de trier les lignes dans un résultat d'une requête SQL. Il est possible de trier les données sur une ou plusieurs colonnes, par ordre ascendant ou descendant.

Quelle clause SQL permet de trier Ordonner les résultats d'une requête ? ›

La clause ORDER BY dans Access trie les enregistrements résultant d'une requête sur un ou plusieurs champs spécifiés par ordre croissant ou décroissant.

Comment filtrer sur SQL ? ›

Pour effectuer un filtre (ou une sélection) d'enregistrements provenant d'un fichier de données, il est possible d'effectuer une boucle de parcours et d'utiliser la fonction HFiltre. Un moyen plus efficace pour effectuer ce filtre (ou sélection) consiste à utiliser une requête SQL.

Quand utiliser group by SQL ? ›

La commande GROUP BY est utilisée en SQL pour grouper plusieurs résultats et utiliser une fonction de totaux sur un groupe de résultat.

Comment trier les résultats d'une requête par ordre décroissant sur la colonne date ? ›

Pour trier un résultat à l'aide de la clause SQL ORDER BY dans l'ordre décroissant, il suffit d'ajouter le mot-clé DESC après le nom de la colonne dans la requête.

Comment calculer la moyenne en SQL ? ›

AVG () calcule la moyenne d'un ensemble de valeurs en divisant la somme de ces valeurs par le nombre de valeurs non null. Si la somme dépasse la valeur maximale pour le type de données de la valeur de retour, AVG() retourne une erreur.

Quels sont les 2 types de requêtes SQL ? ›

Vous savez maintenant que SQL propose deux paradigmes d'interrogation, l'un déclaratif et l'autre procédural.

Comment utiliser SELECT en SQL ? ›

Le SELECT sert à sélectionner une ou plusieurs colonnes d'une table. On fait suivre le SELECT par les colonnes à sélectionner, séparées par une virgule. On peut sélectionner toutes les colonnes d'une table avec le caractère * . On peut renommer des colonnes grâce au mot clé AS.

Quels sont les commandes SQL ? ›

Commandes SQL pour l'amélioration des requêtes
Commande SQLExplication
DISTINCTSupprimer tout doublon du jeu de résultats
LIMITLimiter le jeu aux résultats les plus élevés
GROUP BYRegrouper les résultats en un jeu sur la base d'une caractéristique commune
ORDER BYTrier le jeu de résultats sur la base d'une caractéristique
2 more rows
Nov 29, 2022

Quelle clause SQL est utilisée pour filtrer les résultats d'une requête ? ›

HAVING est une clause très courante dans les requêtes SQL. Tout comme WHERE, elle permet de filtrer les données ; cependant, HAVING fonctionne de manière différente.

Quelle clause SQL est utilisée pour spécifier un critère de jointure entre deux tables dans une requête SELECT ? ›

INNER JOIN table2 : Indique que vous souhaitez effectuer une jointure interne avec une deuxième table.

Quelle commande SQL Faut-il utiliser pour attribuer une valeur par défaut ? ›

Utiliser Transact-SQL pour spécifier une valeur par défaut.

Quelle clause est utilisée pour filtrer les données SQL ? ›

En SQL, la clause HAVING : Filtre les données en fonction de critères définis. Est couramment utilisée pour créer des rapports.

Comment modifier les données d'une table SQL ? ›

Pour modifier des données dans une table visuellement à l'aide de l'Éditeur de données. Dans l'Explorateur d'objets SQL Server, cliquez avec le bouton droit sur Produit et sélectionnez Afficher les données. L'Éditeur de données démarre. Notez les lignes ajoutées à la table dans les procédures précédentes.

Top Articles
Latest Posts
Article information

Author: Rubie Ullrich

Last Updated:

Views: 5959

Rating: 4.1 / 5 (52 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Rubie Ullrich

Birthday: 1998-02-02

Address: 743 Stoltenberg Center, Genovevaville, NJ 59925-3119

Phone: +2202978377583

Job: Administration Engineer

Hobby: Surfing, Sailing, Listening to music, Web surfing, Kitesurfing, Geocaching, Backpacking

Introduction: My name is Rubie Ullrich, I am a enthusiastic, perfect, tender, vivacious, talented, famous, delightful person who loves writing and wants to share my knowledge and understanding with you.