web-dev-qa-db-ja.com

SQL ORDER BY複数列

2つの列で商品テーブルを並べ替えたい:prod_priceおよびprod_name

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_price, prod_name;

ここでソートはどのように行われますか?最初にprod_priceその後prod_name。また、上記のクエリはこれとどのように異なりますか:

SELECT prod_id, prod_price, prod_name
FROM Products
ORDER BY prod_name;

私の製品表は次のとおりです。

CREATE TABLE Products
(
  prod_id    char(10)      NOT NULL ,
  vend_id    char(10)      NOT NULL ,
  prod_name  char(255)     NOT NULL ,
  prod_price decimal(8,2)  NOT NULL ,
  prod_desc  text          NULL 
);
20
user2201462

ORDER BYでのソートは、最初の列で実行され、次に指定されたステートメントの追加の各列で実行されます。

たとえば、次のデータを考慮してください。

Column1    Column2
=======    =======
1          Smith
2          Jones
1          Anderson
3          Andrews

クエリ

SELECT Column1, Column2 FROM thedata ORDER BY Column1, Column2

最初にColumn1のすべての値でソートします

そして、Column2で列をソートして、これを生成します。

Column1    Column2
=======    =======
1          Anderson
1          Smith
2          Jones
3          Andrews

言い換えると、データは最初にColumn1順序でソートされ、次に各サブセット(Column1の値を持つ1行)が2番目の列の順にソートされます。

投稿した2つのステートメントの違いは、最初のステートメントの行が最初にprod_price(価格順、最低から最高)でソートされ、次に名前の順にソートされることです(2つのアイテムが同じ価格で、名前のアルファ値が低いものが最初にリストされますが、2番目は名前順にのみソートされます(つまり、価格に関係なくprod_nameに基づいて価格が表示されます)。

35
Ken White

結果は、ORDER BY句に含まれる列の数だけ、最初の列、2番目の列の順に並べられます。結果を降順に並べ替える場合、ORDER BY句では、関連する列の名前または番号の直後にDESCキーワードを使用する必要があります。

この例をご覧ください

SELECT first_name, last_name, hire_date, salary 
FROM employee 
ORDER BY hire_date DESC,last_name ASC;

順番に注文します。 Hire_Dateを最初に注文し、次にHire_DateでLAST_NAMEします。

6
Rahul

はい、ソートは異なります。

ORDER BYリストは順番に適用されます。
後のアイテムは、前のステップで残ったピアのみを注文します。

なぜtryだけではありませんか?

1

はい、ソートの方法は異なります。最初のシナリオでは、列1に基づく注文、さらに列1に基づいてcolmun2をソートするプロセスに加えて、2番目のシナリオでは、列1のみに基づいて完全に注文します...簡単な例を続行してください... uが取得されます早く..

1
kartiikeya

データベースのサイズに依存します。

SQLはSET理論に基づいています。テーブルを照会するときに本質的に使用される順序はありません。

したがって、最初のクエリを実行する場合、最初に製品価格で並べ替え、次に製品名で並べ替えます。価格カテゴリに重複がある場合、たとえば20ドルとすると、それらの重複を名前で並べ替えて、常に維持しますクエリを実行すると、常に同じ順序で同じ結果セットが返されます。

2番目のクエリを実行する場合、名前のみで順序付けされるため、同じ名前の2つの製品が(何らかの奇妙な理由で)ある場合、クエリの実行後に順序が保証されません。