SQL çoklu sütun sırası


635

SQL'de ve farklı yönlerde birden çok sütuna göre sıralamaya çalışıyorum. column1azalan ve column2artan olarak sıralanır .

Bunu nasıl yapabilirim?


85
Bu "googling cevaplar" ilk sonucudur. En azından "iki sütunla sql sipariş" googled oldu. Sorgumu "mysql 'order by'" olarak değiştirene kadar ilk sonuç sayfamda bile görünmeyen eşdeğer resmi doc sayfasından çok daha okunabilir bir cehennem
Andrew Martin

11
SO sorusunun Google'a ne sıklıkta geldiği göz önüne alındığında, her zaman insanların bununla cevap vermesinin korkunç olduğunu düşünüyorum. SO ya cevaplamak için ya da değil, ve ben site trafiğini yönlendirmek iyi bir şey neden anlayamıyorum
user001

Yanıtlar:


1023
ORDER BY column1 DESC, column2

Bu, her şeyi önce column1(azalan) ve sonra iki veya daha fazla satır için alanlar eşit column2olduğunda (varsayılan olan artan) column1sıralar.


2
burada column1 veya column2 sipariş nasıl?
PoliDev

@PoliDev, İlk önce DESCending düzeninde sütun1'e ve ASCending düzeninde sütun2'ye göre sipariş verir
zaheer

110
Netlik için, bu her şeyi column1önce ve sonra iki sıra column2için column1alanlar eşit olduğunda sıralar.
Nick Benes

2
RDBMS sınırınıza kadar istediğiniz sayıda ifade için ( yalnızca sütunlar değil ) çalışır.
Ignacio Vazquez-Abrams

2
@NickBenes ... ya da şöyle diyebilirsiniz: column2sıralama ölçütü ve daha sonra STABLE sıralama ölçütü gerçekleştirir column1. Bu, kararlı sınıflandırmanın ne olduğunu bilen insanlar için daha açıktır.
Atom

356

Diğer cevapların somut bir örneği yoktur, işte burada:

Aşağıdaki Kişiler tablosunda:

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

Aşağıdaki sorguyu yürütürseniz:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC

Sonuç kümesi şu şekilde görünecektir:

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

23
Bu cevap, çok yararlı ve kısa kabul edilmiş cevap için mükemmel bir tamamlayıcıdır.
enderland

3
Bazı iyi bir örnek, birçoğu 2 sütunu tek seferde nasıl sıralayabileceğinizi düşünüyor, bu da sipariş sorgusu için 2 sütun koysanız bile gerçekte gerçekleşmiyor
Muhammad Faraz

Üç sütuna göre sıralama yaptığımızda ve ilk sütun sıralama düzeni aynı olduğunda ve geri kalan her şey farklı olduğunda aynı sonuçları sağlar. Örnek: 1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc Bunu aşmamızın bir yolu var mı?
Paramesh Korrakuti

1
@ParameshKorrakuti: Beklenen sonuç bu. Örneğinizde ortaya çıkan sipariş yalnızca farklı olan yinelenen FirstName, LastNamegirişler olsaydı farklılık gösterirYearOfBirth
Thomas CG de Vilhena

Örnek için teşekkürler, benim gibi insanları anlamasını sağlıyor.
thippu

136
SELECT  *
FROM    mytable
ORDER BY
        column1 DESC, column2 ASC

19

Birden çok sütun sırası, her iki sütunun karşılık gelen değerlerine bağlıdır: Burada, Alfabe ve Sayılar ile adlandırılan iki sütunun olduğu ve bu iki sütundaki değerlerin artan ve azalan düzenler olduğu tablo örneğim .

resim açıklamasını buraya girin

Şimdi aşağıdaki komutu yürüterek bu iki sütunda Order By gerçekleştiriyorum :

resim açıklamasını buraya girin

Şimdi bu iki sütuna yeni değerler ekliyorum, burada ASC sırasında Alfabe değeri :

resim açıklamasını buraya girin

ve Örnek tablosundaki sütunlar şöyle görünür. Şimdi aynı işlemi tekrarlayın:

resim açıklamasını buraya girin

İlk sütundaki değerlerin sırasıyla, ikinci sütunun ASC düzeninde olmadığını görebilirsiniz.


ayrıca bu verileri de ekleyin (g, 10),(g,12). Ardından, sipariş sorgunuzu çalıştırın, sipariş olarak ikinci sütun alırsınız ASC(yanig-10,g-11,g-12)
Pugal

6

Birden fazla koşulda birden çok sipariş kullanabilirsiniz,

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 

"ORDER BY" içinde "CASE" kullanırsam dizinleme çalışır mı?
Rousonur Jaman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.