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.