集計関数
このページでは、TiDB Cloud Lake の集計関数について、参照しやすいよう機能別に整理して包括的に紹介します。
基本的な集計
| 関数 | 説明 | 例 |
|---|
| COUNT | 行数または非 NULL 値の数をカウントします | COUNT(*) → 10 |
| COUNT_DISTINCT | 重複しない値の数をカウントします | COUNT(DISTINCT city) → 5 |
| APPROX_COUNT_DISTINCT | 重複しない値の数を近似的にカウントします | APPROX_COUNT_DISTINCT(user_id) → 9955 |
| SUM | 値の合計を計算します | SUM(sales) → 1250.75 |
| AVG | 値の平均を計算します | AVG(temperature) → 72.5 |
| MIN | 最小値を返します | MIN(price) → 9.99 |
| MAX | 最大値を返します | MAX(price) → 99.99 |
| ANY_VALUE | グループ内の任意の値を返します | ANY_VALUE(status) → 'active' |
条件付き集計
| 関数 | 説明 | 例 |
|---|
| COUNT_IF | 条件に一致する行をカウントします | COUNT_IF(price > 100) → 5 |
| SUM_IF | 条件に一致する値を合計します | SUM_IF(amount, status = 'completed') → 750.25 |
| AVG_IF | 条件に一致する値の平均を計算します | AVG_IF(score, passed = true) → 85.6 |
| MIN_IF | 条件が true の場合の最小値を返します | MIN_IF(temp, location = 'outside') → 45.2 |
| MAX_IF | 条件が true の場合の最大値を返します | MAX_IF(speed, vehicle = 'car') → 120.5 |
統計関数
パーセンタイルと分布
配列およびコレクションの集計
| 関数 | 説明 | 例 |
|---|
| ARRAY_AGG | 値を配列に収集します | ARRAY_AGG(product) → ['A', 'B', 'C'] |
| GROUP_ARRAY_MOVING_AVG | 配列に対する移動平均 | GROUP_ARRAY_MOVING_AVG(3)(values) → [null, null, 3.0, 6.0, 9.0] |
| GROUP_ARRAY_MOVING_SUM | 配列に対する移動合計 | GROUP_ARRAY_MOVING_SUM(2)(values) → [null, 3, 7, 11, 15] |
地理空間集計
| 関数 | 説明 | 例 |
|---|
| ST_UNION_AGG | グループ内の GEOMETRY 値を結合します | ST_UNION_AGG(geom) → MULTIPOINT(...) |
| ST_INTERSECTION_AGG | グループ内の GEOMETRY 値の共通部分を求めます | ST_INTERSECTION_AGG(geom) → POLYGON(...) |
| ST_ENVELOPE_AGG | グループ内の GEOMETRY 値の外接矩形を返します | ST_ENVELOPE_AGG(geom) → POLYGON(...) |
| ST_COLLECT | GEOMETRY 値を 1 つの GEOMETRY 結果に収集します | ST_COLLECT(geom) → GEOMETRYCOLLECTION(...) |
文字列集計
| 関数 | 説明 | 例 |
|---|
| GROUP_CONCAT | 区切り文字を使って値を連結します | GROUP_CONCAT(city, ', ') → 'New York, London, Tokyo' |
| STRING_AGG | 区切り文字を使って文字列を連結します | STRING_AGG(tag, ',') → 'red,green,blue' |
| LISTAGG | 区切り文字を使って値を連結します | LISTAGG(name, ', ') → 'Alice, Bob, Charlie' |
JSON 集計
| 関数 | 説明 | 例 |
|---|
| JSON_ARRAY_AGG | 値を JSON 配列として集計します | JSON_ARRAY_AGG(name) → '["Alice", "Bob", "Charlie"]' |
| JSON_OBJECT_AGG | キーと値のペアから JSON オブジェクトを作成します | JSON_OBJECT_AGG(name, score) → '{"Alice": 95, "Bob": 87}' |
引数選択
| 関数 | 説明 | 例 |
|---|
| ARG_MAX | expr2 が最大のときの expr1 の値を返します | ARG_MAX(name, score) → 'Alice' |
| ARG_MIN | expr2 が最小のときの expr1 の値を返します | ARG_MIN(name, score) → 'Charlie' |
ファネル分析
| 関数 | 説明 | 例 |
|---|
| RETENTION | リテンション率を計算します | RETENTION(action = 'signup', action = 'purchase') → [100, 40] |
| WINDOWFUNNEL | 時間ウィンドウ内のイベントシーケンスを検索します | WINDOWFUNNEL(1800)(timestamp, event='view', event='click', event='purchase') → 2 |
匿名化