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


154

職場で古いコードを読んでいて、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;

5
参考までに:ビューがプレゼンテーションにのみ使用されることを保証できない場合を除き、ビューにORDER BYを含めることは一般に悪い習慣と見なされています。ORDER BYを指定した別のクエリでビューを使用すると、ORDER BYが2回発生するため、これは無駄です。
OMGポニー2010

3
@OMGポニー:一般的に持っていることは違法と考えられていますORDER BYAにVIEW。標準SQLでは許可されていません。SQL Serverは、2005年以来それを非合法化しています。それを許可するSQL実装の場合、動作はほとんど文書化されておらず、直感に反しています。つまり、絶対に避けてください。
onedaywhen

@onedaywhen:あなたは合唱団に説教しています、MySQL はOracle IMEと同様に、ビューORDER BYを許可します。SQL ServerはORDER BY TOPが存在する場合にそれを許可し、SSMSはを追加するのが大好きTOP 100 PERCENTです。
OMGポニー2010

@OMG Ponies @ "MySQLはビューでのORDER BYを許可します"-MySQLはaでのCHECK制約を許可しますが、CREATE TABLE実際にはそれを受け入れません-実際にはチェックされません!問題は、これらのSQL製品は常にビュー内のinを尊重するかどうかです。ORDER BYたとえば、クエリで使用すると、ORDER BY2度ソートされることはありますか?彼らは行動を文書化するか、それを実行するために実行計画を調べる必要がありますか?私たちは答えを知っていると思います;)
いつか

参考までにORDER BY 1、空白のエイリアスが必要なクロスアプリトリックを使用する別の用途を発見しました 残念ながら、コードはコメントには大きすぎるので、参考までに回答として投稿しました。
AndrewD 2016

回答:


208

この:

ORDER BY 1

...これは「序数」と呼ばれます。この数は、SELECT句で定義された列の数に基づく列を表します。指定したクエリでは、次のことを意味します。

ORDER BY A.PAYMENT_DATE

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

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

1
私の質問序を使用して上振れがあったかどうかを尋ねる:stackoverflow.com/questions/2253040/...
OMGポニー

これにはsqlタグしかありません。標準SQL OREDER BYでは、理論的にはテーブル相関名はスコープ外にあるため、句で列相関名のみを使用できますORDER BY PAYMENT_DATE;。もちろん、すべてのSQL実装が標準に準拠しているわけではありません。
onedaywhen

SQL Serverでテストおよび動作;WITH cte AS( SELECT 1 AS Col1, 'z' AS Col2 UNION SELECT 2 AS Col1, 'y' AS Col2 UNION SELECT 3 AS Col1, 'x' AS Col2 ) SELECT Col2, Col1 FROM cte ORDER BY 1
Ivanzinho

@OMGポニー、あなたはそれが推奨される練習ではないと言ったので、次善の代替品は何ですか?私は好奇心が強いcuzを求めて..ありがとうございます!
インドのジン

40

これは、集合ベースの演算子、例えばunionを使用するときに役立ちます。

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

4
ああ、それは理にかなっています。これが、これまでに見た最初の正当な理由です。
2010

4
@Lazer私はそうは思わない、ユニオンを実行するために内部でソートを行う可能性がありますが、これは論理的な出力の質問とは対照的に実装の質問であり、SQLの精神では、行を順番に出力する必要はありません。また、降順でソートしたい場合はどうなりますか?その後、元の問題に戻ります。
daven11

3
それでも...私はむしろ使用したいorder by tablea.cola
Shahar Shokrani

1
うまくいかない@ShaharShokrani。しかし、言うことができます、私はtableaからxとしてcolaを選択しますunion select xからtablebからxとしてcolbを選択します。
Ozgur Ozturk

select * from(select cola col from tablea union select colb col from tableb)order by col
hareluya86

8

これは単に、クエリの結果の最初の列でビューまたはテーブルを並べ替えることを意味します。



7

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


4

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

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

SELECT Name, Name FROM Segment ORDER BY 1

どうしてそうするか?それらにエイリアスを付けないのはなぜですか。[コメントが遅すぎます]
abdul qayyum

1
@abdulqayyumそれは本当に物事を行うもう一つの方法です。上記の例は非常に単純化されています。「名前」列は、実際には、別のテーブルに挿入する異なるテーブルの異なる列である場合があります。一連のエイリアスを追加すると、読みにくくなる場合があります。それが使用される別の例は、多くの異なる計算を選択し、1つずつ順序付けしたい場合です-別名を付ける必要はありません。(ここでは私は個人的には計算が何であるかを言うためにエイリアスを好みます)
nicV 2018年

-1

こちらもご覧ください:

http://www.techonthenet.com/sql/order_by.php

注文の説明について。何か学んだ!:)

過去にこれを使用して、SQLステートメントに不確定な数のフィルターを追加したいと思いました。ずさんなことは知っていますが、うまくいきました。:P


-1

サンプルのテストWAMPサーバーデータベースの例:-

mysql> select * from user_privileges;

| GRANTEE            | TABLE_CATALOG | PRIVILEGE_TYPE          | IS_GRANTABLE |
   +--------------------+---------------+-------------------------+--------------+
| 'root'@'localhost' | def           | SELECT                  | YES          |
| 'root'@'localhost' | def           | INSERT                  | YES          |
| 'root'@'localhost' | def           | UPDATE                  | YES          |
| 'root'@'localhost' | def           | DELETE                  | YES          |
| 'root'@'localhost' | def           | CREATE                  | YES          |
| 'root'@'localhost' | def           | DROP                    | YES          |
| 'root'@'localhost' | def           | RELOAD                  | YES          |
| 'root'@'localhost' | def           | SHUTDOWN                | YES          |
| 'root'@'localhost' | def           | PROCESS                 | YES          |
| 'root'@'localhost' | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | REFERENCES              | YES          |
| 'root'@'localhost' | def           | INDEX                   | YES          |
| 'root'@'localhost' | def           | ALTER                   | YES          |
| 'root'@'localhost' | def           | SHOW DATABASES          | YES          |
| 'root'@'localhost' | def           | SUPER                   | YES          |
| 'root'@'localhost' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | LOCK TABLES             | YES          |
| 'root'@'localhost' | def           | EXECUTE                 | YES          |
| 'root'@'localhost' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'localhost' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'localhost' | def           | CREATE VIEW             | YES          |
| 'root'@'localhost' | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | CREATE ROUTINE          | YES          |
| 'root'@'localhost' | def           | ALTER ROUTINE           | YES          |
| 'root'@'localhost' | def           | CREATE USER             | YES          |
| 'root'@'localhost' | def           | EVENT                   | YES          |
| 'root'@'localhost' | def           | TRIGGER                 | YES          |
| 'root'@'localhost' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'127.0.0.1' | def           | SELECT                  | YES          |
| 'root'@'127.0.0.1' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | UPDATE                  | YES          |
| 'root'@'127.0.0.1' | def           | DELETE                  | YES          |
| 'root'@'127.0.0.1' | def           | CREATE                  | YES          |
| 'root'@'127.0.0.1' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | RELOAD                  | YES          |
| 'root'@'127.0.0.1' | def           | SHUTDOWN                | YES          |
| 'root'@'127.0.0.1' | def           | PROCESS                 | YES          |
| 'root'@'127.0.0.1' | def           | FILE                    | YES          |
| 'root'@'127.0.0.1' | def           | REFERENCES              | YES          |
| 'root'@'127.0.0.1' | def           | INDEX                   | YES          |
| 'root'@'127.0.0.1' | def           | ALTER                   | YES          |
| 'root'@'127.0.0.1' | def           | SHOW DATABASES          | YES          |
| 'root'@'127.0.0.1' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'127.0.0.1' | def           | LOCK TABLES             | YES          |
| 'root'@'127.0.0.1' | def           | EXECUTE                 | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'127.0.0.1' | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | SHOW VIEW               | YES          |
| 'root'@'127.0.0.1' | def           | CREATE ROUTINE          | YES          |
| 'root'@'127.0.0.1' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | CREATE USER             | YES          |
| 'root'@'127.0.0.1' | def           | EVENT                   | YES          |
| 'root'@'127.0.0.1' | def           | TRIGGER                 | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'::1'       | def           | SELECT                  | YES          |
| 'root'@'::1'       | def           | INSERT                  | YES          |
| 'root'@'::1'       | def           | UPDATE                  | YES          |
| 'root'@'::1'       | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | DROP                    | YES          |
| 'root'@'::1'       | def           | RELOAD                  | YES          |
| 'root'@'::1'       | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | FILE                    | YES          |
| 'root'@'::1'       | def           | REFERENCES              | YES          |
| 'root'@'::1'       | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | SHOW DATABASES          | YES          |
| 'root'@'::1'       | def           | SUPER                   | YES          |
| 'root'@'::1'       | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'::1'       | def           | LOCK TABLES             | YES          |
| 'root'@'::1'       | def           | EXECUTE                 | YES          |
| 'root'@'::1'       | def           | REPLICATION SLAVE       | YES          |
| 'root'@'::1'       | def           | REPLICATION CLIENT      | YES          |
| 'root'@'::1'       | def           | CREATE VIEW             | YES          |
| 'root'@'::1'       | def           | SHOW VIEW               | YES          |
| 'root'@'::1'       | def           | CREATE ROUTINE          | YES          |
| 'root'@'::1'       | def           | ALTER ROUTINE           | YES          |
| 'root'@'::1'       | def           | CREATE USER             | YES          |
| 'root'@'::1'       | def           | EVENT                   | YES          |
| 'root'@'::1'       | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | CREATE TABLESPACE       | YES          |
| ''@'localhost'     | def           | USAGE                   | NO           |
+--------------------+---------------+-------------------------+--------------+
85 rows in set (0.00 sec)

そして、それが追加で与えられるorder by PRIVILEGE_TYPEか、与えられることができるときorder by 3。3番目の列(PRIVILEGE_TYPE)がアルファベット順に並べ替えられていることに注目してください。

mysql> select * from user_privileges order by PRIVILEGE_TYPE;
+--------------------+---------------+-------------------------+--------------+
| GRANTEE            | TABLE_CATALOG | PRIVILEGE_TYPE          | IS_GRANTABLE |
+--------------------+---------------+-------------------------+--------------+
| 'root'@'127.0.0.1' | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | ALTER                   | YES          |
| 'root'@'localhost' | def           | ALTER                   | YES          |
| 'root'@'::1'       | def           | ALTER ROUTINE           | YES          |
| 'root'@'localhost' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | ALTER ROUTINE           | YES          |
| 'root'@'127.0.0.1' | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | CREATE                  | YES          |
| 'root'@'localhost' | def           | CREATE                  | YES          |
| 'root'@'::1'       | def           | CREATE ROUTINE          | YES          |
| 'root'@'localhost' | def           | CREATE ROUTINE          | YES          |
| 'root'@'127.0.0.1' | def           | CREATE ROUTINE          | YES          |
| 'root'@'::1'       | def           | CREATE TABLESPACE       | YES          |
| 'root'@'localhost' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TABLESPACE       | YES          |
| 'root'@'::1'       | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'127.0.0.1' | def           | CREATE TEMPORARY TABLES | YES          |
| 'root'@'localhost' | def           | CREATE USER             | YES          |
| 'root'@'127.0.0.1' | def           | CREATE USER             | YES          |
| 'root'@'::1'       | def           | CREATE USER             | YES          |
| 'root'@'localhost' | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | CREATE VIEW             | YES          |
| 'root'@'::1'       | def           | CREATE VIEW             | YES          |
| 'root'@'127.0.0.1' | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | DELETE                  | YES          |
| 'root'@'localhost' | def           | DELETE                  | YES          |
| 'root'@'::1'       | def           | DROP                    | YES          |
| 'root'@'localhost' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | DROP                    | YES          |
| 'root'@'127.0.0.1' | def           | EVENT                   | YES          |
| 'root'@'::1'       | def           | EVENT                   | YES          |
| 'root'@'localhost' | def           | EVENT                   | YES          |
| 'root'@'127.0.0.1' | def           | EXECUTE                 | YES          |
| 'root'@'::1'       | def           | EXECUTE                 | YES          |
| 'root'@'localhost' | def           | EXECUTE                 | YES          |
| 'root'@'127.0.0.1' | def           | FILE                    | YES          |
| 'root'@'::1'       | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | FILE                    | YES          |
| 'root'@'localhost' | def           | INDEX                   | YES          |
| 'root'@'127.0.0.1' | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | INDEX                   | YES          |
| 'root'@'::1'       | def           | INSERT                  | YES          |
| 'root'@'localhost' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | INSERT                  | YES          |
| 'root'@'127.0.0.1' | def           | LOCK TABLES             | YES          |
| 'root'@'::1'       | def           | LOCK TABLES             | YES          |
| 'root'@'localhost' | def           | LOCK TABLES             | YES          |
| 'root'@'127.0.0.1' | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | PROCESS                 | YES          |
| 'root'@'localhost' | def           | PROCESS                 | YES          |
| 'root'@'::1'       | def           | REFERENCES              | YES          |
| 'root'@'localhost' | def           | REFERENCES              | YES          |
| 'root'@'127.0.0.1' | def           | REFERENCES              | YES          |
| 'root'@'::1'       | def           | RELOAD                  | YES          |
| 'root'@'localhost' | def           | RELOAD                  | YES          |
| 'root'@'127.0.0.1' | def           | RELOAD                  | YES          |
| 'root'@'::1'       | def           | REPLICATION CLIENT      | YES          |
| 'root'@'localhost' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION CLIENT      | YES          |
| 'root'@'::1'       | def           | REPLICATION SLAVE       | YES          |
| 'root'@'localhost' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | REPLICATION SLAVE       | YES          |
| 'root'@'127.0.0.1' | def           | SELECT                  | YES          |
| 'root'@'::1'       | def           | SELECT                  | YES          |
| 'root'@'localhost' | def           | SELECT                  | YES          |
| 'root'@'127.0.0.1' | def           | SHOW DATABASES          |  YES          |
| 'root'@'::1'       | def           | SHOW DATABASES          | YES          |
| 'root'@'localhost' | def           | SHOW DATABASES          | YES          |
| 'root'@'127.0.0.1' | def           | SHOW VIEW               | YES          |
| 'root'@'::1'       | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | SHOW VIEW               | YES          |
| 'root'@'localhost' | def           | SHUTDOWN                | YES          |
| 'root'@'127.0.0.1' | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | SHUTDOWN                | YES          |
| 'root'@'::1'       | def           | SUPER                   | YES          |
| 'root'@'localhost' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | SUPER                   | YES          |
| 'root'@'127.0.0.1' | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | TRIGGER                 | YES          |
| 'root'@'localhost' | def           | TRIGGER                 | YES          |
| 'root'@'::1'       | def           | UPDATE                  | YES          |
| 'root'@'localhost' | def           | UPDATE                  | YES          |
| 'root'@'127.0.0.1' | def           | UPDATE                  | YES          |
| ''@'localhost'     | def           | USAGE                   | NO           |     +--------------------+---------------+-------------------------+--------------+
85 rows in set (0.00 sec)

間違いなく、長い答えとたくさんのスクロール。また、クエリの出力をテキストファイルに渡すのに苦労しました。煩わしいものを使わずにそれを行う方法は次のinto outfileとおりです-

ティーE:/sqllogfile.txt;

そして、完了したら、ロギングを停止します-

ティーオフ;

それがより明確になることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.