Lorsque l’on dispose de plusieurs milliers ou même des millions de données, il est important de se retrouver une fois qu’on les sollicite ou qu’on les affiche. Trier les données selon une ou plusieurs critères spécifiques est nécessaire afin d’obtenir des résultats clairs et concis. La commande SQL ORDER BY permet justement d’effectuer ce tri. Dans cet article, vous allez découvrir et apprendre les différents modes d’utilisation de cette commande.

Définition de SQL ORDER BY

La commande ORDER BY est une commande de tri de données. En SQL, cette commande est utilisée pour trier des données selon deux modes : en ordre ascendant ou descendant.

Syntaxe de SQL ORDER BY

Pour trier un résultat à l’aide de SQL ORDER BY, la requête à utiliser est la suivante : 

SELECT colonne1, colonne2
FROM table
ORDER BY colonne1

Il faut savoir que l’ordre par défaut lors de l’exécution de cette requête est ascendant. Toutefois, vous avez la possibilité d’inverser l’ordre en vous servant du suffixe DESC après le nom de la colonne. 

Effectuer un tri sur plusieurs colonnes

Si vous voulez faire le tri sur plusieurs colonnes, il faut juste séparer les critères de tri par des virgules, comme suit :

SELECT colonne1, colonne2, colonne3
FROM table
ORDER BY colonne1 DESC, colonne2 ASC

Considérons par exemple la table nommée utilisateur qui contient les données suivantes :

utilisateur_table

Pour obtenir la liste des utilisateurs dans un ordre alphabétique, il faut exécuter la requête suivante :

SELECT * FROM utilisateur
ORDER BY nom
sql_order_by_select

Trier sur plusieurs colonnes dans différents ordres

Vous avez aussi la possibilité de trier la table sur plusieurs colonnes, mais sous un ordre différent. Reprenons notre précédente table et exécutons la requête suivante :

SELECT
    etat,
    nom,
    prenom
FROM
    utilisateur
ORDER BY
    etat DESC,
    nom ASC;
order_by_asc_desc

Trier avec une colonne qui n’existe pas dans la liste choisie

Vous pouvez effectuer le tri avec une colonne qui n’est pas dans la liste choisie. L’instruction suivante par exemple trie les clients par etat malgré que la colonne etat n’est pas dans la liste sélectionnée.

SELECT
    nom,
    prenom
FROM
    utilisateur
ORDER BY
    etat;

Trier avec une expression à l’aide de SQL ORDER BY

On peut tout à fait combiner la clause SQL ORDER BY avec une expression. Cela permet d’obtenir des résultats plus précis une fois la commande exécutée.

Par exemple, pour connaître le nombre de caractères dans une chaîne, il faut utiliser la fonction LEN() ou LENGTH() . Ici, cette fonction est utilisée avec la clause OREDER BY pour trier les clients par la longueur du prénom.

SELECT
    nom,
    prenom
FROM
    utilisateur
ORDER BY
    LEN (nom) DESC;

Faire le tri par position ordinale des colonnes

Grâce à la position ordinale des différentes colonnes dans une liste, vous pouvez effectuer un tri de cette dernière. L’instruction ci-dessous trie les clients par leur nom et prénom en utilisant la position ordinale des colonnes.

SELECT
    nom,
    prenom
FROM
    utilisateur
ORDER BY
    1,
    2;
order_by_ordinal

Trier par date avec SQL ORDER BY

Voici la syntaxe de base pour effectuer ce tri :

SELECT colonne_1, colonne_2, ..., colonne_n
FROM
nom_table
WHERE condition
ORDER BY Colonne_date ASC | DESC;

Essayons de comprendre paramètres de cette syntaxe :

  • colonne_1 à colonne_n sont des colonnes à récupérer pour faire le tri ;
  • nom_table est la table dans laquelle la requête doit extraire les colonnes mentionnées ;
  • condition est le critère de filtrage ;
  • colonne_date est une colonne de type date utilisée pour trier les enregistrements ;
  • ASC|DESC est l’ordre de trie.

Utiliser ORDER BY avec CASE

L’introduction de CASE dans ORDER BY donne encore plus de possibilités pour le classement des données. Vous pouvez utiliser CASE lorsque vous souhaitez faire un classement selon un ordre alphabétique ou encore par exemple selon le poste hiérarchique dans une entreprise.

Avec CASE, vous avez encore plusieurs autres possibilités de trier vos données. Par exemple, vous pouvez effectuer des tris basés sur le nom, le prénom ou le pays.

Considérons par exemple, la table suivante :

table_boutique

Nous allons par exemple effectuer un tri ordonné par country puis trier les magasins d’un même pays city et si le magasin se trouve aux États-Unis, le tri se fera alors sur state.

SELECT *
FROM boutique
ORDER BY pays,
    CASE
        WHEN pays = 'Etat uni' THEN etat
        ELSE ville
    END;
sql_order_by_case

Le code sélectionne toutes les colonnes de la table puis les ordonne d’abord par pays et ensuite avec les critères énumérés dans CASE.

Autres utilisations de CASE avec SQL ORDER BY

Lors d’une requête comprenant la clause CASE et ORDER BY, vous pouvez également ajouter le mot DESC :

SELECT *
FROM boutique
ORDER BY pays,
    CASE
        WHEN pays = 'Etat uni' THEN etat
        ELSE ville
    END DESC;

Dans le code précédent, nous n’avons pas mis le paramètre DESC et le classement s’est fait par ordre croissant. En ajoutant DESC après CASE, vous obtenez la liste classée par ville :

order_by_case_desc

ORDER BY dans des requêtes plus complexes

Quand vous voulez utiliser ORDER BY avec d’autres clauses comme JOIN, HAVING ou GROUP BY, il est nécessaire de placer la clause ORDER BY à la fin de la requête. Prenons par exemple la table suivante :

table_realisateur

Par exemple, si l’on souhaite obtenir le nom du réalisateur ayant réalisé au moins un film et que le classement est par alphabétique, il faut exécuter cette requête :

SELECT realisateur, count(titre) AS nombre_film
FROM film
GROUP BY realisateur
HAVING count(titre) > 1
ORDER BY realisateur;
order_by_group_by_having

Ordonner avec des données textuelles

Effectuer un classement des données textuelles exige un tri par ordre alphabétique de A à Z pour l’ordre croissant et de Z à A pour l’ordre décroissant. La requête est la suivante :

SELECT * FROM utilisateur
ORDER BY nom DESC;
order_by_text

Différence entre la clause ORDER BY et GROUP BY

Le mot clé ORDER BY est utilisé pour trier le résultat d’une requête dans un ordre croissant ou décroissant, l’ordre par défaut est le croissant. Le mot DESC est utilisé pour l’ordre décroissant et ASC pour l’ordre croissant comme le souligne la syntaxe de base suivante :

SELECT colonne_1, colonne_2, colonne_3...........
FROM nom_table
ORDER BY colonne_1, colonne_2, colonne_3....... ASC|DESC ;

Par contre, le mot clé GROUP BY est utilisé en SQL pour regrouper des lignes de mêmes valeurs. Il est le plus souvent utilisé avec les fonctions d’agrégation comme MAX(), AVG(), COUNT() etc. et la syntaxe est la suivante :

SELECT nom_fonction(colonne_1), colonne_2
FROM nom_table
WHERE condition
GROUP BY colonne_1, colonne_2
ORDER BY colonne_1, colonne_2 ;

Voilà, nous terminons cet article avec cette section. Vous avez appris à utiliser la clause ORDER BY pour faire des tris de données en SQL, des tris sous différentes formes, par ordre décroissant, croissant et bien d’autres encore.

Si vous souhaitez aller plus loin dans la manipulation des données en Big Data, nous vous invitons à télécharger cette formation sur Spark avec Scala.


Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

>