適用対象:Microsoft Fabric の SQL 分析エンドポイントと Microsoft Fabric のウェアハウス
APPROX_MEDIAN関数は、非NULL数値値のおおよそ中央値、すなわち50パーセンタイルを返します。 集計関数とウィンドウ (分析) 関数の両方として使用できます。
- 総使用率:グループ全体のおおよその中央値を返します。
- ウィンドウ使用:各パーティションのおおよその中央値を返しつつ、行レベルの出力を保持します。
Syntax
集計関数の構文:
APPROX_MEDIAN ( numeric_expression )
分析関数の構文:
APPROX_MEDIAN ( numeric_expression ) OVER ( [ <partition_by_clause> ] )
引数
numeric_expression
中央値の近似値を計算する数値式。 サポートされる正確な数値タイプは、 int、 bigint、 smallint、 tinyint、 numeric、 decimal、 smallmoney、 moneyです。 サポートされている近似数値型は float と realです。
OVER 句
partition_by_clauseでは、FROM句によって生成された結果セットがパーティションに分割され、関数が各パーティションに適用されます。
もし partition_by_clauseを指定しなければ、関数はクエリ結果セットのすべての行を単一のパーティションとして扱います。
OVER条項はAPPROX_MEDIANのORDER BY、ROWS、RANGEを支持していません。
詳細については、「 SELECT - OVER 句 (Transact-SQL)」を参照してください。
戻り値の型
float(53) を返します。
注釈
APPROX_MEDIAN 順序付けられた非NULL 入力値の連続した第50パーセンタイルを推定します。 正確な結果が必要な場合は 中央値 を使ってください。
おおよその結果は正確な MEDIAN 結果と若干異なることがあり、実行計画や並列マージパスの影響で実行ごとに異なることがあります。
APPROX_MEDIAN は非決定的です。 詳細については、「 決定論的関数と非決定的関数」を参照してください。
NULL 値は無視されます。 すべての入力値がNULL、または条件を満たす行がなければ、APPROX_MEDIANNULL返します。
ANSI_WARNINGSがONされた場合、NULL値を消去すると標準的な集計警告が表示されます。
APPROX_MEDIAN これは、大規模なデータセットでの正確な MEDIAN 計算と比較して遅延とメモリ使用量を削減することを目的としています。
DISTINCTはサポートされていません。 文字、日付、時間、日付時間の表現はサポートされていません。
APPROX_MEDIAN関数はFabric Data WarehouseおよびFabricアイテムのSQL分析エンドポイントで利用可能です。
APPROX_MEDIAN関数はSQL Server、Azure SQL Database、Azure SQL Managed Instance、FabricのSQLデータベースではサポートされていません。
利用シーン
大規模なダッシュボード、探索的分析、グループ化された報告には APPROX_MEDIAN を活用し、正確な推定値で十分でクエリのパフォーマンスが正確な中央値よりも重要になる場合に活用しましょう。 一般的な例としては、おおよそ中央値の注文値、サービス遅延、テレメトリー測定などがあります。
Examples
A. 総約中央値を計算します
この例は8つの値の中央値を推定しています。
SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8)) AS t(value);
結果は 4.5の正確な中央値に近づきますが、多少の変動があります。
B. 各グループについておおよその中央値を計算します
この例は各販売地域の中央値注文量を推定しています。
WITH SalesOrders AS (
SELECT *
FROM (VALUES
('North', 120.00),
('North', 220.00),
('North', 320.00),
('South', 150.00),
('South', 250.00),
('South', 450.00)
) AS v(region, order_amount)
)
SELECT
region,
APPROX_MEDIAN(order_amount) AS ApproxMedianOrderAmount
FROM SalesOrders
GROUP BY region;
C. NULL値は無視してください
この例では中央値を推定する際に NULL 値を無視しています。
SELECT APPROX_MEDIAN(value) AS ApproxMedianValue
FROM (VALUES (1), (2), (NULL), (3), (4)) AS t(value);
すべての入力値が NULLであれば、関数は NULL を返します。
D. 分割されたウィンドウの近似中央値を計算します
この例では、各リクエスト行ごとに各サービスのおおよそ中央値レイテンシを加算します。
WITH ServiceLatency AS (
SELECT *
FROM (VALUES
('Checkout', 'req-001', 180),
('Checkout', 'req-002', 220),
('Checkout', 'req-003', 260),
('Search', 'req-010', 90),
('Search', 'req-011', 110),
('Search', 'req-012', 130)
) AS v(service, request_id, latency_ms)
)
SELECT
service,
request_id,
latency_ms,
APPROX_MEDIAN(latency_ms) OVER (PARTITION BY service) AS ServiceApproxMedianLatency
FROM ServiceLatency;