メインコンテンツへスキップ
ウィンドウ関数を使用すると、現在の行に関連する行の集合に対して計算を実行できます。 集約関数で行う計算と似た計算にも使用できますが、ウィンドウ関数では行が単一の出力にグループ化されることはなく、個々の行はそのまま返されます。

標準ウィンドウ関数

ClickHouse は、ウィンドウおよびウィンドウ関数に対する標準 SQL 構文をサポートしています。 以下の表は、現在サポートされている機能を示しています。

構文

  • PARTITION BY - 結果セットをどのようにグループに分けるかを定義します。
  • ORDER BY - aggregate_function の計算時に、グループ内の行をどのような順序で並べるかを定義します。
  • ROWS or RANGE - フレームの境界を定義し、aggregate_function はそのフレーム内で計算されます。
  • WINDOW - 複数の式で同じウィンドウ定義を使えるようにします。

ウィンドウ関数としてのみ使用できる関数

以下の関数は、ウィンドウ関数としてのみ使用できます。ほとんどは標準 SQL 関数ですが、lagInFrameleadInFramenonNegativeDerivative は ClickHouse の拡張機能です。

ウィンドウ関数の使用例をいくつか見てみましょう。

行番号の付与

集計関数

各選手の給与を所属チームの平均給与と比較します。
各選手の給与をチーム内の最高額と比較します。

カラムによるパーティション化

フレームの境界

実践的な例

以下の例では、現実によくある問題を解決する方法を示します。

部門ごとの最高給与/給与総額

累積和

移動平均/スライディング平均 (3行ごと)

移動平均/スライディング平均 (10秒ごと)

移動平均 / スライディング平均 (10日ごと)

温度は秒精度で保存されていますが、RangeORDER BY toDate(ts) を使用すると、サイズ 10 単位のフレームが形成され、toDate(ts) によってその単位は日になります。

参考資料

GitHub Issues

ウィンドウ関数 の初期サポートに向けたロードマップは、この issue にあります。 ウィンドウ関数 に関連するすべての GitHub issue には、comp-window-functions タグが付けられています。

テスト

これらのテストには、現在サポートされている構文の例が含まれています。 https://github.com/ClickHouse/ClickHouse/blob/master/tests/performance/window_functions.xml https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/01591_window_functions.sql

Postgres Docs

https://www.postgresql.org/docs/current/sql-select.html#SQL-WINDOW https://www.postgresql.org/docs/devel/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS https://www.postgresql.org/docs/devel/functions-window.html https://www.postgresql.org/docs/devel/tutorial-window.html

MySQL Docs

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html https://dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html
最終更新日 2026年6月25日