Recherche…


Utilisez ORDER BY avec TOP pour renvoyer les x premières lignes en fonction de la valeur d'une colonne

Dans cet exemple, nous pouvons utiliser GROUP BY non seulement pour déterminer le type des lignes renvoyées, mais également quelles lignes sont renvoyées, car nous utilisons TOP pour limiter le jeu de résultats.

Disons que nous voulons renvoyer les 5 meilleurs utilisateurs de réputation depuis un site de questions / réponses peu connu.

Sans COMMANDE PAR

Cette requête renvoie les 5 premières lignes triées par défaut, qui dans ce cas est "Id", la première colonne de la table (même si ce n'est pas une colonne affichée dans les résultats).

SELECT TOP 5 DisplayName, Reputation
FROM Users

résultats...

Afficher un nom Réputation
Communauté 1
Geoff Dalgas 12567
Jarrod Dixon 11739
Jeff Atwood 37628
Joel Spolsky 25784

Avec ORDER BY

SELECT TOP 5 DisplayName, Reputation
FROM Users
ORDER BY Reputation desc

résultats...

Afficher un nom Réputation
JonSkeet 865023
Darin Dimitrov 661741
BalusC 650237
Hans Passant 625870
Marc Gravell 601636

Remarques

Certaines versions de SQL (telles que MySQL) utilisent une clause LIMIT à la fin d'un SELECT , au lieu de TOP au début, par exemple:

SELECT DisplayName, Reputation
FROM Users
ORDER BY Reputation DESC
LIMIT 5

Tri par plusieurs colonnes

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY JoinDate, Reputation
Afficher un nom JoinDate Réputation
Communauté 2008-09-15 1
Jeff Atwood 2008-09-16 25784
Joel Spolsky 2008-09-16 37628
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567

Tri par numéro de colonne (au lieu de nom)

Vous pouvez utiliser le numéro d'une colonne (où la colonne la plus à gauche est «1») pour indiquer la colonne sur laquelle baser le tri, au lieu de décrire la colonne par son nom.

Pro: Si vous pensez qu'il est probable que vous modifieriez les noms de colonnes plus tard, cela ne briserait pas ce code.

Con: Cela réduira généralement la lisibilité de la requête (il est clair que «ORDER BY Reputation» signifie, alors que «ORDER BY 14» nécessite un comptage, probablement avec un doigt sur l'écran.)

Cette requête trie le résultat en fonction des informations dans la position relative de la colonne 3 partir de l'instruction select au lieu du nom de la colonne Reputation .

SELECT DisplayName, JoinDate, Reputation
FROM Users
ORDER BY 3
Afficher un nom JoinDate Réputation
Communauté 2008-09-15 1
Jarrod Dixon 2008-10-03 11739
Geoff Dalgas 2008-10-03 12567
Joel Spolsky 2008-09-16 25784
Jeff Atwood 2008-09-16 37628

Commande par alias

En raison de l'ordre de traitement des requêtes logiques, des alias peuvent être utilisés dans l'ordre.

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY jd, rep

Et peut utiliser l'ordre relatif des colonnes dans l'instruction select. Considérez le même exemple que ci-dessus et, au lieu d'utiliser des alias, utilisez l'ordre relatif comme pour le nom d'affichage, il est 1, pour Jd il est 2 et ainsi de suite

SELECT DisplayName, JoinDate as jd, Reputation as rep
FROM Users
ORDER BY 2, 3

Ordre de tri personnalisé

Pour trier cette table Employee par département, vous utiliseriez ORDER BY Department . Toutefois, si vous souhaitez un ordre de tri différent de celui par ordre alphabétique, vous devez mapper les valeurs du Department en différentes valeurs qui sont triées correctement. cela peut être fait avec une expression CASE:

prénom département
Hasan IL
Yusuf HEURE
Hillary HEURE
Joe IL
Joyeux HEURE
Ken Comptable
SELECT *
FROM Employee
ORDER BY CASE Department
         WHEN 'HR'         THEN 1
         WHEN 'Accountant' THEN 2
         ELSE                   3
         END;
prénom département
Yusuf HEURE
Hillary HEURE
Joyeux HEURE
Ken Comptable
Hasan IL
Joe IL


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow