sql >> データベース >  >> RDS >> Sqlserver

SQLServerでTOP句を使用するときに最後の場所に結びつく結果を含める方法

    TOPを使用する場合 SQL Serverのクエリの句では、2つ以上の結果が最後の場所に結びつく場合があります。 TOPのデフォルトの動作のため、これがいつ発生するかさえわからないでしょう。 指定した行数以下を返すことです。

    TOP 句はWITH TIESを受け入れます 最後の場所に関連するすべての結果を含めるかどうかを指定できる引数。 ORDER BYにより、行は最後の場所に結びつく可能性があります 同じ値を含む列。したがって、この引数を使用すると、実際に指定したよりも多くの行が返される可能性があります。

    例1-データ

    まず、次の例で使用するデータを次に示します。

    SELECT 
      AlbumId,
      AlbumName,
      ArtistId 
    FROM Albums;
    

    結果:

    +-----------+--------------------------+------------+
    | AlbumId   | AlbumName                | ArtistId   |
    |-----------+--------------------------+------------|
    | 1         | Powerslave               | 1          |
    | 2         | Powerage                 | 2          |
    | 3         | Singing Down the Lane    | 6          |
    | 4         | Ziltoid the Omniscient   | 5          |
    | 5         | Casualties of Cool       | 5          |
    | 6         | Epicloud                 | 5          |
    | 7         | Somewhere in Time        | 1          |
    | 8         | Piece of Mind            | 1          |
    | 9         | Killers                  | 1          |
    | 10        | No Prayer for the Dying  | 1          |
    | 11        | No Sound Without Silence | 9          |
    | 12        | Big Swing Face           | 4          |
    | 13        | Blue Night               | 12         |
    | 14        | Eternity                 | 12         |
    | 15        | Scandinavia              | 12         |
    | 16        | Long Lost Suitcase       | 7          |
    | 17        | Praise and Blame         | 7          |
    | 18        | Along Came Jones         | 7          |
    | 19        | All Night Wrong          | 3          |
    | 20        | The Sixteen Men of Tain  | 3          |
    | 21        | Yo Wassup                | 9          |
    | 22        | Busted                   | 9          |
    +-----------+--------------------------+------------+
    

    例2–タイなしでTOPを使用する

    TOPを使用するとどうなりますか なし WITH TIESを指定する 。これは、ほとんどの人がこの句を使用する方法です。

    この場合、結果をArtistIdで並べ替えます。 。

    SELECT TOP(3)
      AlbumId,
      AlbumName,
      ArtistId 
    FROM Albums
    ORDER BY ArtistId ASC;
    

    結果:

    +-----------+-------------------+------------+
    | AlbumId   | AlbumName         | ArtistId   |
    |-----------+-------------------+------------|
    | 1         | Powerslave        | 1          |
    | 7         | Somewhere in Time | 1          |
    | 8         | Piece of Mind     | 1          |
    +-----------+-------------------+------------+
    

    予想どおり、3つの行があります。これらは、TOPで指定された上位3つです。 条項。

    例3–ネクタイでTOPを使用する

    今、関係のために。 WITH TIESを追加するとどうなりますか 。

    SELECT TOP(3) WITH TIES
      AlbumId,
      AlbumName,
      ArtistId 
    FROM Albums
    ORDER BY ArtistId ASC;
    

    結果:

    +-----------+-------------------------+------------+
    | AlbumId   | AlbumName               | ArtistId   |
    |-----------+-------------------------+------------|
    | 1         | Powerslave              | 1          |
    | 7         | Somewhere in Time       | 1          |
    | 8         | Piece of Mind           | 1          |
    | 9         | Killers                 | 1          |
    | 10        | No Prayer for the Dying | 1          |
    +-----------+-------------------------+------------+
    

    これで、3行ではなく5行になります。これは、同じArtistIdを共有する行がさらに2つあるためです。 3行目として。言い換えれば、3列が最後の場所に結びついていました。

    SQL Serverでは、返される行を結ぶ順序は任意であることに注意してください。

    例4–関係を排除するための変更されたORDERBY句

    AlbumIdを追加すると ORDER BYへの列 条項、これは完全に結びつきを排除します。

    SELECT TOP(3) WITH TIES
      AlbumId,
      AlbumName,
      ArtistId 
    FROM Albums
    ORDER BY ArtistId ASC, AlbumId ASC;
    

    結果:

    +-----------+-------------------+------------+
    | AlbumId   | AlbumName         | ArtistId   |
    |-----------+-------------------+------------|
    | 1         | Powerslave        | 1          |
    | 7         | Somewhere in Time | 1          |
    | 8         | Piece of Mind     | 1          |
    +-----------+-------------------+------------+
    

    したがって、WITH TIESを指定した場合でも 、この場合は存在しません。

    例5–WHERE句の使用

    これが最後の例です。ここでは、WHEREを使用しています。 テーブルの中央から一連の行を抽出する句。最初の例はネクタイなし、2番目の例はネクタイありです。

    結びつきなし:

    SELECT TOP(4)
      AlbumId,
      AlbumName,
      ArtistId 
    FROM Albums
    WHERE AlbumId > 10
    ORDER BY ArtistId ASC;
    

    結果:

    +-----------+-------------------------+------------+
    | AlbumId   | AlbumName               | ArtistId   |
    |-----------+-------------------------+------------|
    | 19        | All Night Wrong         | 3          |
    | 20        | The Sixteen Men of Tain | 3          |
    | 12        | Big Swing Face          | 4          |
    | 16        | Long Lost Suitcase      | 7          |
    +-----------+-------------------------+------------+
    

    ネクタイあり:

    SELECT TOP(4) WITH TIES
      AlbumId,
      AlbumName,
      ArtistId 
    FROM Albums
    WHERE AlbumId > 10
    ORDER BY ArtistId ASC;
    

    結果:

    +-----------+-------------------------+------------+
    | AlbumId   | AlbumName               | ArtistId   |
    |-----------+-------------------------+------------|
    | 19        | All Night Wrong         | 3          |
    | 20        | The Sixteen Men of Tain | 3          |
    | 12        | Big Swing Face          | 4          |
    | 16        | Long Lost Suitcase      | 7          |
    | 17        | Praise and Blame        | 7          |
    | 18        | Along Came Jones        | 7          |
    +-----------+-------------------------+------------+
    

    1. Oracle SQL&PL / SQLとは何ですか?初心者が知っておくべきことすべて

    2. 実行が完了した後、SSISパッケージジョブの結果を確認するにはどうすればよいですか?

    3. 可用性グループ通信用の専用ネットワークの構成

    4. 共有サーバーにあるMySQLデータベースにリモート接続する方法