web-dev-qa-db-ja.com

SQL selectステートメントのOrder By 1の目的は何ですか?

私は職場で古いコードを読んでいますが、order by 1句を持ついくつかのビューがあることに気付きました。これは何を達成しますか?

例:

Create view v_payment_summary AS
SELECT A.PAYMENT_DATE,
       (SELECT SUM(paymentamount)
          FROM payment B
         WHERE PAYMENT_DATE = B.PAYMENT_DATE
           and SOME CONDITION) AS SUM_X,
       (SELECT SUM(paymentamount)
          FROM payment B
         WHERE PAYMENT_DATE = B.PAYMENT_DATE
           and SOME OTHER CONDITION) AS SUM_Y    
FROM payment A    
ORDER BY 1;
131
echo

この:

ORDER BY 1

...は「順序」として知られています-番号は、SELECT句で定義された列の数に基づく列を表します。指定したクエリでは、次のことを意味します。

ORDER BY A.PAYMENT_DATE

次の理由により、推奨される方法ではありません。

  1. 明白/明示的ではない
  2. 列の順序が変更された場合、クエリはまだ有効であるため、意図しないもので順序付けするリスクがあります。
169
OMG Ponies

これは、セットベースの演算子を使用する場合に便利です。連合

select cola
  from tablea
union
select colb
  from tableb
order by 1;
33
daven11

私はOracleでは列#1による順序付けを意味すると考えています

7
Christoph

これにより、返された最初の列で結果が並べ替えられます。この例では、payment_dateでソートします。

6
CTKeane

クエリの結果の1列目でビューまたはテーブルを並べ替えることを意味します。

5
kshitij

他の回答で述べたように、ORDER BY 1は最初の列で並べます。

私はあなたがそれを使用するかもしれないところの別の例を見つけました。同じ列を選択するように注文する必要がある特定のクエリがあります。以下のNameで注文すると、SQLエラーが発生します。

SELECT Name, Name FROM Segment ORDER BY 1
3
nicV