SQL複数列の順序


635

SQLで複数の列を使用して、さまざまな方向でソートしようとしています。column1降順、column2昇順でソートされます。

これどうやってするの?


85
これは「グーグルの答え」の最初の結果です。少なくとも、「2列によるsqlの順序付け」をググったときでした。クエリを "mysql 'order by'"に変更するまで結果の最初のページに表示されなかった同等の公式ドキュメントページよりもはるかに読みやすい
Andrew Martin

11
SOの質問がGoogleの上位に来る頻度を考えると、人々がそれに答えることは常にひどいものです。SOのいずれかここで答えることかではなく、離れたサイトのトラフィックを向けることは良いことだ、なぜ私が理解できない
USER001

回答:


1023
ORDER BY column1 DESC, column2

これにより、2つ以上の行のフィールドが等しい場合は常に、column1最初に(降順)、次にcolumn2(昇順(デフォルト))でcolumn1すべてが並べ替えられます。


2
ここでどのようにcolumn1またはcolumn2を注文しますか?
PoliDev 2013年

@PoliDev、最初に列1で降順で、列2で(昇順)
zaheer

110
明確にするために、これはすべてをcolumn1最初にソートし、次に2つの行column2column1フィールドが等しい場合にソートします。
Nick Benes、2014年

2
RDBMSの制限まで、任意の数の式(列だけでなく)で機能します。
Ignacio Vazquez-Abrams

2
@NickBenes ...またはあなたが言うことができる:それはによってソートcolumn2でソートSTABLEをしてから実行column1。これは、安定したソートが何であるかを知っている人にとってはより明確です。
Atom

356

他の答えには具体的な例がないので、ここにそれを示します:

次のPeopleテーブルがあるとします。

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

以下のクエリを実行すると:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC

結果セットは次のようになります。

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

23
この回答は、非常に役立つ短く受け入れられた回答の優れた補足です。
エンダーランド2014年

3
いくつかの良い例であり、どのように並べ替え、単一の時点での2列は、実際にあなたが注文クエリの2列に置く場合でも発生しないことを多くのシンクタンク
ムハンマドFarazを

3つの列で並べ替えても同じ結果が得られ、最初の列の並べ替え順序は同じで、残りはすべて異なります。例::1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc これを克服する方法はありますか?
Paramesh Korrakuti

1
@ParameshKorrakuti:それは期待される結果です。例の結果の順序は、重複するFirstName, LastNameエントリが異なる場合にのみ異なりますYearOfBirth
Thomas CG de Vilhena 2018

例をありがとう、それは私のような人々を理解させます。
thippu


19

複数の列の順序は、両方の列の対応する値に依存します。次の表の例では、アルファベットと数字で名前が付けられた2つの列があり、これらの2つの列の値はascおよびdescの順序です。

ここに画像の説明を入力してください

今、私は実行して秩序をコマンドの下に実行することにより、これら2列に:

ここに画像の説明を入力してください

ここでも、これらの2つの列に新しい値を挿入します。ASC順のアルファベット値:

ここに画像の説明を入力してください

例の表の列は次のようになります。もう一度同じ操作を実行します。

ここに画像の説明を入力してください

最初の列の値は降順ですが、2番目の列はASC順ではありません。


このデータも挿入します(g, 10),(g,12)。その後、ご注文を-が運営するクエリ、あなたはように、第2の列を取得するASCために(その手段g-10,g-11,g-12)
Pugal

6

複数の条件で複数の順序を使用できます。

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」内で「CASE」を使用すると、索引付けは機能しますか?
Rousonur Jaman 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.