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

SQLServerの結果セットのパーセンテージを返す

    SQL Serverでは、TOPを使用できます クエリから返される行を結果セットの特定の割合に制限する句。

    たとえば、結果の上位10%、または必要なパーセンテージを返すことができます。

    例1-完全な結果セット

    まず、完全な結果セットを返しましょう:

    SELECT
      AlbumId,
      AlbumName 
    FROM Albums
    ORDER BY AlbumId;
    

    結果:

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

    したがって、完全な結果セットには22行あります。

    例2–結果の上位10%を返す

    それでは、これらの結果の上位10パーセントを返しましょう:

    SELECT TOP(10) PERCENT
      AlbumId,
      AlbumName 
    FROM Albums
    ORDER BY AlbumId;
    

    結果:

    +-----------+-----------------------+
    | AlbumId   | AlbumName             |
    |-----------+-----------------------|
    | 1         | Powerslave            |
    | 2         | Powerage              |
    | 3         | Singing Down the Lane |
    +-----------+-----------------------+
    

    この場合、3つの行が返されます。

    22の10パーセントが実際には2.2(3ではない)であることに気付くかもしれません。明らかに、SQL Serverは2.2行を表示できないため、結果を切り上げます。

    例2–切り捨てではなく切り上げ

    SQLServerが結果を切り捨てない理由がわからない場合は 小数部が5未満の場合は、次の例を参照してください。

    SELECT TOP(1) PERCENT
      AlbumId,
      AlbumName 
    FROM Albums
    ORDER BY AlbumId;
    

    結果:

    +-----------+-------------+
    | AlbumId   | AlbumName   |
    |-----------+-------------|
    | 1         | Powerslave  |
    +-----------+-------------+
    

    完全な結果セットには22行が含まれていたため、22行の1%は、0.22行が返されることを意味することに注意してください。

    そして、これがまさに私たちが切り捨てられたくない理由です。 0.22行が切り捨てられた場合、行は返されないため、クエリに一致するものがないと誤って結論付けられます。

    例3–ゼロパーセント

    ご想像のとおり、0%を使用すると、ゼロ行が返されます。

    SELECT TOP(0) PERCENT
      AlbumId,
      AlbumName 
    FROM Albums
    ORDER BY AlbumId;
    

    結果:

    (0 rows affected)
    

    例4–最大パーセンテージ

    提供できるパーセンテージ値は0〜100のみです。

    100より大きい値を使用しようとする例を次に示します。

    SELECT TOP(120) PERCENT
      AlbumId,
      AlbumName 
    FROM Albums
    ORDER BY AlbumId;
    

    結果:

    Msg 1031, Level 15, State 1, Line 2
    Percent values must be between 0 and 100.
    

    例5–負のパーセンテージ

    前述のように、パーセンテージ値は0から100の間でなければならないため、負のパーセンテージを指定するとエラーが発生します。

    SELECT TOP(-10) PERCENT
      AlbumId,
      AlbumName 
    FROM Albums
    ORDER BY AlbumId;
    

    結果:

    Msg 1031, Level 15, State 1, Line 3
    Percent values must be between 0 and 100.
    

    1. OracleはMySQLINSERTIGNOREと同等ですか?

    2. PostgreSQLでNULLを使用していなくても、ヘッダーでNULLビットマップを使用しますか?

    3. MySQLで複数の列を更新する方法

    4. SQLServerのカーソルタイプ-ローカルカーソルとグローバルカーソルの違いは何ですか。 SQLServerチュートリアル/TSQLチュートリアル