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?


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.


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

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

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.


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 

Apakah pengindeksan berfungsi, Jika saya menggunakan "CASE" di dalam "ORDER BY"?
Rousonur Jaman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.