ウィンドウ関数
概要
ウィンドウ関数は、関連する行の集合に対して計算を実行しながら、入力行ごとに 1 つの結果を返します。集計関数とは異なり、ウィンドウ関数は行を 1 つの出力にまとめません。
主な特徴:
- 現在の行に関連する行の「ウィンドウ」に対して動作します
- 入力行ごとに 1 つの値を返します(グループ化や集約による行の圧縮は行いません)
- ウィンドウ内の他の行の値にアクセスできます
- 柔軟な計算のためにパーティション分割と並び替えをサポートします
このドキュメントの SQL 例について:
- ✅ 完全な SQL 文は TiDB Cloud Lake に対して検証済みです
- ⚠️ 構文例はウィンドウフレームのパターンを示します(完全な文ではありません)
- 📋 すべての例は TiDB Cloud Lake がサポートする標準 SQL 構文を使用しています
- 🔍 「完全な例」と記載された例はそのまま実行可能です
ウィンドウ関数のカテゴリ
TiDB Cloud Lake は、ウィンドウ関数の 2 つの主要カテゴリをサポートしています。
1. ウィンドウ専用関数
これらの関数は、ウィンドウ操作向けに特別に設計されています。
ランキング関数:
分布関数:
値アクセス関数:
エイリアス:
2. ウィンドウ関数として使用される集計関数
これらは標準の集計関数で、OVER 句とともに使用することでウィンドウ操作を実行できます。
条件付きバリアント
基本構文
すべてのウィンドウ関数は、次のパターンに従います。
FUNCTION() OVER (
[ PARTITION BY column ]
[ ORDER BY column ]
[ window_frame ]
)
- PARTITION BY: データをグループに分割します
- ORDER BY: 各パーティション内で行を並び替えます
- window_frame: 含める行を定義します(省略可能)
ウィンドウフレームの指定
ウィンドウフレームは、各行の計算に含まれる行を定義します。TiDB Cloud Lake は 2 種類のウィンドウフレームをサポートしています。
1. ROWS BETWEEN
物理的な行数を使用してウィンドウフレームを定義します。
構文:
ROWS BETWEEN frame_start AND frame_end
例:
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW- 累積合計ROWS BETWEEN 2 PRECEDING AND CURRENT ROW- 3 日移動平均ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING- 中心ウィンドウ
詳細な例と使用方法については、ROWS BETWEEN を参照してください。
2. RANGE BETWEEN
論理的な値の範囲を使用してウィンドウフレームを定義します。
構文:
RANGE BETWEEN frame_start AND frame_end
例:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW- 値に基づく累積RANGE BETWEEN INTERVAL '7' DAY PRECEDING AND CURRENT ROW- 7 日間ウィンドウ
詳細な例と使用方法については、RANGE BETWEEN を参照してください。
一般的なユースケース
- ランキング: リーダーボードや上位 N 件のリストを作成
- 分析: 累積合計、移動平均、パーセンタイルを計算
- 比較: 現在の値と前 / 次の値を比較
- グループ化: 詳細を失わずにデータをバケットに分割
詳細な構文と例については、上記の各関数のドキュメントを参照してください。