SQL pemesanan beberapa kolom

635

Saya mencoba mengurutkan berdasarkan beberapa kolom dalam SQL, dan dalam arah yang berbeda. column1akan diurutkan menurun, dan column2naik.

Bagaimana saya bisa melakukan ini?

Señor Reginold Francis
sumber
85
Ini ADALAH "jawaban googling" hasil pertama. Setidaknya itu ketika saya googled "sql pemesanan oleh dua kolom". Ini jauh lebih mudah dibaca daripada halaman dokumen resmi yang setara yang bahkan tidak muncul di halaman pertama hasil saya sampai saya mengubah permintaan saya menjadi "pesanan saya oleh 'mysql' oleh
Andrew Martin
11
Mengingat seberapa sering sebuah pertanyaan SO berada di puncak Google, saya selalu merasa mengerikan karena orang-orang menjawabnya. SO ada di sini untuk menjawab atau tidak, dan saya tidak bisa mengerti mengapa mengarahkan lalu lintas situs adalah hal yang baik
user001

Jawaban:

1023
ORDER BY column1 DESC, column2

Ini mengurutkan semuanya dengan column1(turun) pertama, dan kemudian dengan column2(naik, yang merupakan default) setiap kali column1bidang untuk dua atau lebih baris sama.

Ignacio Vazquez-Abrams
sumber
2
di sini bagaimana cara memesan kolom1 atau kolom2?
PoliDev
@PoliDev, Ini pertama kali dipesan dengan kolom1 dalam urutan DESCending dan oleh kolom2 (dalam urutan ASCending)
zaheer
110
Untuk kejelasan, ini mengurutkan semuanya dengan column1pertama dan kemudian column2setiap kali column1bidang untuk dua baris sama.
Nick Benes
2
Ini akan bekerja untuk sejumlah ekspresi ( bukan hanya kolom), hingga batas RDBMS Anda.
Ignacio Vazquez-Abrams
2
@NickBenes ... atau Anda bisa mengatakan: itu mengurutkan column2dan kemudian melakukan penyortiran STABLE oleh column1. Ini lebih jelas bagi orang yang tahu apa itu sortir stabil.
Atom
356

Jawaban lainnya tidak memiliki contoh konkret, jadi begini:

Diberikan tabel People berikut :

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

Jika Anda menjalankan kueri di bawah ini:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC

Set hasil akan terlihat seperti ini:

 FirstName |  LastName   |  YearOfBirth
----------------------------------------
  Thomas   | More        |   1478
  Thomas   | Jefferson   |   1826
  Thomas   | Alva Edison |   1847
  Benjamin | Franklin    |   1706
Thomas CG de Vilhena
sumber
23
Jawaban ini merupakan pelengkap yang bagus untuk jawaban yang sangat membantu dan diterima dengan singkat.
enderland
3
Ini adalah beberapa contoh yang baik, banyak yang berpikir bahwa bagaimana Anda bisa mengurutkan 2 kolom sekaligus yang sebenarnya tidak terjadi bahkan jika Anda menempatkan 2 kolom untuk permintaan pesanan
Muhammad Faraz
Ini memberikan hasil yang sama ketika kita mengurutkan dengan tiga kolom dan urutan penyortiran kolom pertama adalah sama dan sisanya semuanya berbeda. Contoh: 1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc Apakah ada cara untuk mengatasinya?
Paramesh Korrakuti
1
@ParameshKorrakuti: Itulah hasil yang diharapkan. Pemesanan yang dihasilkan dalam contoh Anda hanya akan berbeda jika ada FirstName, LastNameentri duplikat dengan berbedaYearOfBirth
Thomas CG de Vilhena
Terima kasih untuk contohnya, itu membuat orang seperti saya mengerti.
thippu
136
SELECT  *
FROM    mytable
ORDER BY
        column1 DESC, column2 ASC
Quassnoi
sumber
19

Beberapa memesan kolom tergantung pada nilai-nilai yang sesuai baik kolom: Berikut ini adalah contoh meja saya di mana dua kolom nama dengan abjad dan Nomor dan nilai-nilai dalam dua kolom ini asc dan desc perintah.

masukkan deskripsi gambar di sini

Sekarang saya melakukan Order Dengan di dua kolom ini dengan mengeksekusi perintah di bawah ini:

masukkan deskripsi gambar di sini

Sekarang lagi saya memasukkan nilai baru dalam dua kolom ini, di mana nilai Alphabet dalam urutan ASC :

masukkan deskripsi gambar di sini

dan kolom pada tabel Contoh terlihat seperti ini. Sekarang lagi lakukan operasi yang sama:

masukkan deskripsi gambar di sini

Anda bisa melihat nilai-nilai di kolom pertama dalam urutan desc tetapi kolom kedua tidak dalam urutan ASC.

Jason Clark
sumber
juga masukkan data ini juga (g, 10),(g,12). Kemudian, jalankan permintaan pesanan-menurut Anda, Anda mendapatkan kolom kedua sebagai ASCpesanan (itu artinyag-10,g-11,g-12)
Pugal
6

Anda dapat menggunakan beberapa pemesanan pada beberapa kondisi,

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 
atik sarker
sumber
Apakah pengindeksan berfungsi, Jika saya menggunakan "CASE" di dalam "ORDER BY"?
Rousonur Jaman