サーチ…
前書き
分析関数を使用して、値のグループに基づいて値を決定します。たとえば、このタイプの関数を使用して、実行中の合計、パーセンテージ、またはグループ内の最上位の結果を判断できます。
構文
- FIRST_VALUE(scalar_expression)OVER([partition_by_clause] order_by_clause [行範囲句])
- LAST_VALUE(scalar_expression)OVER([partition_by_clause] order_by_clause [行範囲句])
- LAG(scalar_expression [、offset] [、default])OVER([partition_by_clause] order_by_clause)
- LEAD(scalar_expression [、offset]、[デフォルト])OVER([partition_by_clause] order_by_clause)
- PERCENT_RANK()OVER([partition_by_clause] order_by_clause)
- CUME_DIST()OVER([partition_by_clause] order_by_clause)
- PERCENTILE_DISC(numeric_literal)WITHIN GROUP(ORDER BY order_by_expression [ASC | DESC])オーバー([<partition_by_clause>])
- PERCENTILE_CONT(numeric_literal)WITHIN GROUP(ORDER BY order_by_expression [ASC | DESC])OVER([<partition_by_clause>])
FIRST_VALUE
FIRST_VALUE
関数を使用して、スカラー式を使用して識別する順序付き結果セットの最初の値を決定します。
SELECT StateProvinceID, Name, TaxRate,
FIRST_VALUE(StateProvinceID)
OVER(ORDER BY TaxRate ASC) AS FirstValue
FROM SalesTaxRate;
この例では、 FIRST_VALUE
関数を使用して、最低税率の州または州のID
を返しID
。 OVER
句は最低税率を得るために税率を注文するために使用されます。
StateProvinceID | 名 | 税率 | FirstValue |
---|---|---|---|
74 | ユタ州の消費税 | 5.00 | 74 |
36 | ミネソタ州販売税 | 6.75 | 74 |
30 | マサチューセッツ州販売税 | 7.00 | 74 |
1 | カナダのGST | 7.00 | 74 |
57 | カナダのGST | 7.00 | 74 |
63 | カナダのGST | 7.00 | 74 |
LAST_VALUE
LAST_VALUE
ファンクションは、スカラー式を使用して指定した順序付き結果セットの最後の値を提供します。
SELECT TerritoryID, StartDate, BusinessentityID,
LAST_VALUE(BusinessentityID)
OVER(ORDER BY TerritoryID) AS LastValue
FROM SalesTerritoryHistory;
この例では、 LAST_VALUE
関数を使用して、 LAST_VALUE
れた値の各行セットの最後の値を返します。
テリトリーID | 開始日 | ビジネスID | LastValue |
---|---|---|---|
1 | 2005-07-01 00.00.00.000 | 280 | 283 |
1 | 2006-11-01 00.00.00.000 | 284 | 283 |
1 | 2005-07-01 00.00.00.000 | 283 | 283 |
2 | 2007-01-01 00.00.00.000 | 277 | 275 |
2 | 2005-07-01 00.00.00.000 | 275 | 275 |
3 | 2007-01-01 00.00.00.000 | 275 | 277 |
LAGとLEAD
LAG
関数は、同じ結果セットの現在の行の前にある行のデータを提供します。たとえば、 SELECT
文では、現在の行の値と前の行の値を比較できます。
スカラー式を使用して、比較する値を指定します。 offsetパラメータは、比較に使用される現在の行の前の行の数です。行数を指定しない場合は、1行のデフォルト値が使用されます。
デフォルトのパラメータは、offsetの式がNULL
値を持つ場合に返される値を指定します。値を指定しない場合は、 NULL
値が戻されます。
LEAD
関数は、行セットの現在の行の後にある行のデータを提供します。たとえば、 SELECT
文では、現在の行の値と次の行の値を比較できます。
スカラー式を使用して比較する値を指定します。 offsetパラメータは、比較に使用される現在の行の後の行の数です。
デフォルトのパラメータを使用して、offsetの式にNULL
値がある場合にNULL
値を指定します。これらのパラメーターを指定しないと、1行のデフォルトが使用され、 NULL
値が戻されます。
SELECT BusinessEntityID, SalesYTD,
LEAD(SalesYTD, 1, 0) OVER(ORDER BY BusinessEntityID) AS "Lead value",
LAG(SalesYTD, 1, 0) OVER(ORDER BY BusinessEntityID) AS "Lag value"
FROM SalesPerson;
この例では、LEAD関数とLAG関数を使用して、各従業員の売上値を上と下の従業員の売上値と比較し、BusinessEntityID列に基づいてレコードを並べ替えます。
BusinessEntityID | SalesYTD | リード値 | ラグ値 |
---|---|---|---|
274 | 559697.5639 | 3763178.1787 | 0.0000 |
275 | 3763178.1787 | 4251368.5497 | 559697.5639 |
276 | 4251368.5497 | 3189418.3662 | 3763178.1787 |
277 | 3189418.3662 | 1453719.4653 | 4251368.5497 |
278 | 1453719.4653 | 2315185.6110 | 3189418.3662 |
279 | 2315185.6110 | 1352577.1325 | 1453719.4653 |
PERCENT_RANKとCUME_DIST
PERCENT_RANK
ファンクションは、行セットに対する行のランキングを計算します。割合は、現在の行よりも低い値を持つグループ内の行の数に基づいています。
結果セットの最初の値は常にパーセントランクを持ちます。セット内の最高位または最後の値の値は常に1です。
CUME_DIST
関数は、値のグループ内の指定された値の相対位置を、その値以下の値の割合を決定することによって計算します。これは累積分布と呼ばれます。
SELECT BusinessEntityID, JobTitle, SickLeaveHours,
PERCENT_RANK() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours DESC)
AS "Percent Rank",
CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours DESC)
AS "Cumulative Distribution"
FROM Employee;
この例では、 ORDER
句を使用して、従業員の役職に基づいてSELECT
文で取り出された行をパーティション化またはグループ化し、各グループの結果を従業員が使用した病気休暇の数に基づいてソートします。
BusinessEntityID | 職名 | SickLeaveHours | パーセントランク | 累積分布 |
---|---|---|---|---|
267 | アプリケーションスペシャリスト | 57 | 0 | 0.25 |
268 | アプリケーションスペシャリスト | 56 | 0.333333333333333 | 0.75 |
269 | アプリケーションスペシャリスト | 56 | 0.333333333333333 | 0.75 |
272 | アプリケーションスペシャリスト | 55 | 1 | 1 |
262 | チーフ・ファイナンシャル・オフィサーとのアシスタント | 48 | 0 | 1 |
239 | 特典スペシャリスト | 45 | 0 | 1 |
252 | 買い手 | 50 | 0 | 0.111111111111111 |
251 | 買い手 | 49 | 0.125 | 0.333333333333333 |
256 | 買い手 | 49 | 0.125 | 0.333333333333333 |
253 | 買い手 | 48 | 0.375 | 0.555555555555555 |
254 | 買い手 | 48 | 0.375 | 0.555555555555555 |
PERCENT_RANK
機能は、各グループ内のエントリをランク付けします。各エントリについて、同じグループ内の値の低いエントリの割合を返します。
CUME_DIST
関数は、現在の値以下の値の割合を返す点を除いて、同様です。
PERCENTILE_DISCとPERCENTILE_CONT
PERCENTILE_DISC
関数は、累積分布がnumeric_literal
パラメーターを使用してnumeric_literal
た百分位数よりも高い最初の項目の値をリストします。
値は、 WITHIN GROUP
句で指定された行セットまたはパーティションによってグループ化されます。
PERCENTILE_CONT
機能は同様であるPERCENTILE_DISC
関数が、最初の一致するエントリと次のエントリの和の平均値を返します。
SELECT BusinessEntityID, JobTitle, SickLeaveHours,
CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours ASC)
AS "Cumulative Distribution",
PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY SickLeaveHours)
OVER(PARTITION BY JobTitle) AS "Percentile Discreet"
FROM Employee;
0.5パーセンタイルと一致する、またはそれを超える行からの正確な値を見つけるには、 PERCENTILE_DISC
関数の数値リテラルとして渡します。結果セットのPercentile Discreet列には、累積分布が指定された百分位数よりも高い行の値がリストされます。
BusinessEntityID | 職名 | SickLeaveHours | 累積分布 | Percentile Discreet |
---|---|---|---|---|
272 | アプリケーションスペシャリスト | 55 | 0.25 | 56 |
268 | アプリケーションスペシャリスト | 56 | 0.75 | 56 |
269 | アプリケーションスペシャリスト | 56 | 0.75 | 56 |
267 | アプリケーションスペシャリスト | 57 | 1 | 56 |
計算を一連の値に基づいて行うには、 PERCENTILE_CONT
関数を使用します。結果の「Percentile Continuous」列には、結果値と次に一致する値の合計の平均値が表示されます。
SELECT BusinessEntityID, JobTitle, SickLeaveHours,
CUME_DIST() OVER(PARTITION BY JobTitle ORDER BY SickLeaveHours ASC)
AS "Cumulative Distribution",
PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY SickLeaveHours)
OVER(PARTITION BY JobTitle) AS "Percentile Discreet",
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY SickLeaveHours)
OVER(PARTITION BY JobTitle) AS "Percentile Continuous"
FROM Employee;
BusinessEntityID | 職名 | SickLeaveHours | 累積分布 | Percentile Discreet | パーセンテイル連続 |
---|---|---|---|---|---|
272 | アプリケーションスペシャリスト | 55 | 0.25 | 56 | 56 |
268 | アプリケーションスペシャリスト | 56 | 0.75 | 56 | 56 |
269 | アプリケーションスペシャリスト | 56 | 0.75 | 56 | 56 |
267 | アプリケーションスペシャリスト | 57 | 1 | 56 | 56 |