Kolejność SQL w wielu kolumnach


634

Próbuję sortować według wielu kolumn w SQL i w różnych kierunkach. column1będą sortowane malejąco i column2rosnąco.

W jaki sposób mogę to zrobić?


85
To jest pierwszy wynik „odpowiedzi Google”. Przynajmniej tak było, kiedy przejrzałem „sql porządkowanie według dwóch kolumn”. Jest o wiele bardziej czytelny niż równoważna oficjalna strona z dokumentami, która nawet nie pojawiła się na mojej pierwszej stronie wyników, dopóki nie zmieniłem zapytania na „mysql 'order by” ”
Andrew Martin

11
Biorąc pod uwagę, jak często pytanie SO pojawia się na szczycie Google, zawsze uważam, że okropne jest odpowiadanie na nie przez ludzi. SO jest albo tutaj odpowiedzieć, czy nie, i nie mogę zrozumieć, dlaczego kierowanie ruchu na stronie z dala to dobra rzecz
user001

Odpowiedzi:


1022
ORDER BY column1 DESC, column2

Sortuje wszystko column1najpierw (malejąco), a następnie column2(rosnąco, co jest ustawieniem domyślnym), gdy column1pola dla dwóch lub więcej wierszy są równe.


2
tutaj jak zamówić kolumnę 1 lub kolumnę 2?
PoliDev,

@PoliDev, Najpierw sortuje według kolumny 1 w kolejności malejącej i według kolumny 2 (w kolejności rosnącej)
zaheer

110
Dla jasności sortuje to wszystko column1najpierw, a następnie za column2każdym razem, gdy column1pola dla dwóch wierszy są równe.
Nick Benes

2
Będzie działał dla dowolnej liczby wyrażeń ( nie tylko kolumn), aż do limitu RDBMS.
Ignacio Vazquez-Abrams

2
@NickBenes ... lub można powiedzieć: sortuje według, column2a następnie wykonuje sortowanie STABILNE według column1. Jest to bardziej jasne dla osób, które wiedzą, czym jest stabilne sortowanie.
Atom

356

Inne odpowiedzi nie zawierają konkretnego przykładu, więc oto:

Biorąc pod uwagę następującą tabelę Ludzie :

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

Jeśli wykonasz zapytanie poniżej:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC

Zestaw wyników będzie wyglądał następująco:

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

23
Ta odpowiedź jest doskonałym uzupełnieniem bardzo pomocnej i krótkiej akceptowanej odpowiedzi.
kraina krańców

3
Jest to dobry przykład, wielu uważa, że ​​w jaki sposób można posortować 2 kolumny za jednym razem, co tak naprawdę nie dzieje się, nawet jeśli wstawisz 2 kolumny do zapytania o zamówienie
Muhammad Faraz

Zapewnia takie same wyniki, gdy sortujemy za pomocą trzech kolumn, a kolejność sortowania w pierwszej kolumnie jest taka sama, a reszta wszystko jest inne. Ex: 1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc Czy jest jakiś sposób, aby to przezwyciężyć?
Paramesh Korrakuti

1
@ParameshKorrakuti: To oczekiwany wynik. Kolejność wynikająca w twoim przykładzie będzie się różnić tylko, jeśli będą zduplikowane FirstName, LastNamewpisy z wyraźnymiYearOfBirth
Thomas CG de Vilhena

Dzięki za przykład, ludzie tacy jak ja rozumieją.
thippu


19

Porządkowanie wielu kolumn zależy od odpowiadających im wartości obu kolumn: Oto mój przykład tabeli, w której dwie kolumny nazwane są alfabetami i liczbami, a wartościami w tych dwóch kolumnach są porządek rosnący i malejący .

wprowadź opis zdjęcia tutaj

Teraz wykonuję Order By w tych dwóch kolumnach, wykonując poniższe polecenie:

wprowadź opis zdjęcia tutaj

Teraz ponownie wstawiam nowe wartości w tych dwóch kolumnach, gdzie wartość alfabetu w kolejności ASC :

wprowadź opis zdjęcia tutaj

i kolumny w przykładowej tabeli wyglądają tak. Teraz ponownie wykonaj tę samą operację:

wprowadź opis zdjęcia tutaj

Możesz zobaczyć, że wartości w pierwszej kolumnie są w porządku malejącym, ale w drugiej kolumnie nie ma kolejności ASC.


również wstaw te dane (g, 10),(g,12). Następnie uruchom zapytanie według zamówienia, otrzymasz drugą kolumnę jako ASCzamówienie (to znaczyg-10,g-11,g-12)
Pugal

6

Możesz użyć wielokrotnego zamawiania pod wieloma warunkami,

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 

Czy indeksowanie działa, jeśli użyję „CASE” wewnątrz „ORDER BY”?
Rousonur Jaman,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.