798 votes

Ordre des colonnes multiples en SQL

Comment puis-je trier par plusieurs colonnes en SQL et dans des directions différentes. column1 serait trié en ordre décroissant, et column2 ascendant.

100 votes

C'EST le premier résultat de "googling answers". En tout cas, c'était le cas quand j'ai cherché "sql ordering by two columns". C'est beaucoup plus lisible que la page de documentation officielle équivalente, qui n'est même pas apparue dans ma première page de résultats jusqu'à ce que je change ma requête en "mysql 'order by'".

17 votes

Étant donné la fréquence à laquelle une question sur le SO arrive en tête de Google, je trouve toujours terrible que les gens y répondent. L'OS est là pour répondre ou non, et je ne comprends pas pourquoi il est bon de détourner le trafic du site.

1261voto

Ignacio Vazquez-Abrams Points 312628
ORDER BY column1 DESC, column2

Cela trie tout par column1 (descendant) d'abord, et ensuite par column2 (en ordre ascendant, ce qui est le cas par défaut) chaque fois que l'option column1 les champs de deux rangées ou plus sont égaux.

4 votes

Ici comment commander soit la colonne1 soit la colonne2 ?

1 votes

@PoliDev, Il ordonne d'abord par colonne1 en ordre DESCendant et ensuite par colonne2 (en ordre ASCendant).

150 votes

Pour plus de clarté, tout est trié par column1 d'abord et ensuite par column2 chaque fois que le column1 pour deux rangées sont égales.

434voto

Les autres réponses manquent d'un exemple concret, alors voilà :

Compte tenu des éléments suivants Personnes table :

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826

Si vous exécutez la requête ci-dessous :

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC

Le jeu de résultats ressemblera à ceci :

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706

39 votes

Cette réponse est un excellent complément à la réponse acceptée, très utile et courte.

5 votes

Il s'agit d'un bon exemple, beaucoup pensent qu'il est possible de trier deux colonnes à la fois, ce qui n'est pas le cas même si vous mettez deux colonnes dans la requête d'ordre.

1 votes

Il fournit les mêmes résultats lorsque nous trions avec trois colonnes et que l'ordre de tri de la première colonne est le même et que le reste est différent. Ex : : 1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc Y a-t-il un moyen de surmonter cela ?

145voto

Quassnoi Points 191041
SELECT  *
FROM    mytable
ORDER BY
        column1 DESC, column2 ASC

24voto

Jason Clark Points 1199

L'ordre des colonnes multiples dépend des valeurs correspondantes des deux colonnes : Voici mon exemple de table où il y a deux colonnes nommées avec des Alphabets et des Chiffres et les valeurs dans ces deux colonnes sont asc et desc ordres.

enter image description here

Maintenant je fais Commander par dans ces deux colonnes en exécutant la commande ci-dessous :

enter image description here

Maintenant, j'insère à nouveau de nouvelles valeurs dans ces deux colonnes, où la valeur Alphabet en ASC l'ordre :

enter image description here

et les colonnes de la table Exemple ressemblent à ceci. Maintenant, effectuez à nouveau la même opération :

enter image description here

Vous pouvez voir que les valeurs de la première colonne sont dans l'ordre desc mais la deuxième colonne n'est pas dans l'ordre ASC.

12voto

atik sarker Points 198

Vous pouvez utiliser la commande multiple sur plusieurs conditions,

ORDER BY 
     (CASE 
        WHEN @AlphabetBy = 2  THEN [Drug Name]
      END) ASC,
    CASE 
        WHEN @TopBy = 1  THEN [Rx Count]
        WHEN @TopBy = 2  THEN [Cost]
        WHEN @TopBy = 3  THEN [Revenue]
    END DESC

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X