集約関数

入力値のセットから 単一 の結果を計算するための関数です。Elasticsearch SQLは、グループ化(暗黙的または明示的)とともにのみ集約関数をサポートします。

一般的な目的

AVG

概要:

Sql

  1. AVG(numeric_field)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明: 入力値の平均(算術平均)を返します。

Sql

  1. SELECT AVG(salary) AS avg FROM emp;
  2. avg
  3. ---------------
  4. 48248.55

Sql

  1. SELECT AVG(salary / 12.0) AS avg FROM emp;
  2. avg
  3. ---------------
  4. 4020.7125

COUNT

概要:

Sql

  1. COUNT(expression)

入力:

フィールド名、ワイルドカード(*)または任意の数値。COUNT(*)またはCOUNT(<literal>)の場合、すべての値が考慮され、nullまたは欠損値も含まれます。COUNT(<field_name>)の場合、null値は考慮されません。

出力: 数値

説明: 入力値の合計数(カウント)を返します。

Sql

  1. SELECT COUNT(*) AS count FROM emp;
  2. count
  3. ---------------
  4. 100

COUNT(ALL)

概要:

Sql

  1. COUNT(ALL field_name)

入力:

フィールド名。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: 数値

説明: すべての非NULL入力値の合計数(カウント)を返します。COUNT(<field_name>)COUNT(ALL <field_name>)は同等です。

Sql

  1. SELECT COUNT(ALL last_name) AS count_all, COUNT(DISTINCT last_name) count_distinct FROM emp;
  2. count_all | count_distinct
  3. ---------------+------------------
  4. 100 |96

Sql

  1. SELECT COUNT(ALL CASE WHEN languages IS NULL THEN -1 ELSE languages END) AS count_all, COUNT(DISTINCT CASE WHEN languages IS NULL THEN -1 ELSE languages END) count_distinct FROM emp;
  2. count_all | count_distinct
  3. ---------------+---------------
  4. 100 |6

COUNT(DISTINCT)

概要:

Sql

  1. COUNT(DISTINCT field_name)

入力:

フィールド名

出力: 数値。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

説明: 入力値の異なる非NULL値の合計数を返します。

Sql

  1. SELECT COUNT(DISTINCT hire_date) unique_hires, COUNT(hire_date) AS hires FROM emp;
  2. unique_hires | hires
  3. ----------------+---------------
  4. 99 |100

Sql

  1. SELECT COUNT(DISTINCT DATE_TRUNC('YEAR', hire_date)) unique_hires, COUNT(DATE_TRUNC('YEAR', hire_date)) AS hires FROM emp;
  2. unique_hires | hires
  3. ---------------+---------------
  4. 14 |100

FIRST/FIRST_VALUE

概要:

Sql

  1. FIRST(
  2. field_name
  3. [, ordering_field_name])

入力:

集約の対象フィールド
並べ替えに使用されるオプションのフィールド

出力: 入力と同じ型

説明: ordering_field_name列でソートされたfield_name入力列の最初の非null値(存在する場合)を返します。ordering_field_nameが提供されていない場合、field_name列のみがソートに使用されます。例:


| a | b |
| :— | :— |
| 100 | 1 |
| 200 | 1 |
| 1 | 2 |
| 2 | 2 |
| 10 | null |
| 20 | null |
| null | null |

Sql

  1. SELECT FIRST(a) FROM t

結果は次のようになります:

FIRST(a)
1

そして

Sql

  1. SELECT FIRST(a, b) FROM t

結果は次のようになります:

FIRST(a, b)
100

Sql

  1. SELECT FIRST(first_name) FROM emp;
  2. FIRST(first_name)
  3. --------------------
  4. Alejandro

Sql

  1. SELECT gender, FIRST(first_name) FROM emp GROUP BY gender ORDER BY gender;
  2. gender | FIRST(first_name)
  3. ------------+--------------------
  4. null | Berni
  5. F | Alejandro
  6. M | Amabile

Sql

  1. SELECT FIRST(first_name, birth_date) FROM emp;
  2. FIRST(first_name, birth_date)
  3. --------------------------------
  4. Remzi

Sql

  1. SELECT gender, FIRST(first_name, birth_date) FROM emp GROUP BY gender ORDER BY gender;
  2. gender | FIRST(first_name, birth_date)
  3. --------------+--------------------------------
  4. null | Lillian
  5. F | Sumant
  6. M | Remzi
  1. #### Sql
  2. ``````sql
  3. SELECT gender, FIRST_VALUE(first_name, birth_date) FROM emp GROUP BY gender ORDER BY gender;
  4. gender | FIRST_VALUE(first_name, birth_date)
  5. --------------+--------------------------------------
  6. null | Lillian
  7. F | Sumant
  8. M | Remzi
  9. `

Sql

  1. SELECT gender, FIRST_VALUE(SUBSTRING(first_name, 2, 6), birth_date) AS "first" FROM emp GROUP BY gender ORDER BY gender;
  2. gender | first
  3. ---------------+---------------
  4. null |illian
  5. F |umant
  6. M |emzi
  1. `````FIRST`````は、フィールドが[キーワードとして保存されている](a85566ae42da41c4.md#before-enabling-fielddata)場合を除き、[`````text`````](/read/elasticsearch-8-15/a85566ae42da41c4.md)型の列で使用できません。
  2. ## LAST/LAST_VALUE
  3. **概要:**
  4. #### Sql
  5. ``````sql
  6. LAST(
  7. field_name
  8. [, ordering_field_name])
  9. `

入力:

集約の対象フィールド
並べ替えに使用されるオプションのフィールド

出力: 入力と同じ型

説明: FIRST/FIRST_VALUEの逆です。field_name入力列の最後の非null値(存在する場合)をordering_field_name列で降順にソートして返します。ordering_field_nameが提供されていない場合、field_name列のみがソートに使用されます。例:


| a | b |
| :— | :— |
| 10 | 1 |
| 20 | 1 |
| 1 | 2 |
| 2 | 2 |
| 100 | null |
| 200 | null |
| null | null |

Sql

  1. SELECT LAST(a) FROM t

結果は次のようになります:

LAST(a)
200

そして

Sql

  1. SELECT LAST(a, b) FROM t

結果は次のようになります:

LAST(a, b)
2

Sql

  1. SELECT LAST(first_name) FROM emp;
  2. LAST(first_name)
  3. -------------------
  4. Zvonko

Sql

  1. SELECT gender, LAST(first_name) FROM emp GROUP BY gender ORDER BY gender;
  2. gender | LAST(first_name)
  3. ------------+-------------------
  4. null | Patricio
  5. F | Xinglin
  6. M | Zvonko

Sql

  1. SELECT LAST(first_name, birth_date) FROM emp;
  2. LAST(first_name, birth_date)
  3. -------------------------------
  4. Hilari

Sql

  1. SELECT gender, LAST(first_name, birth_date) FROM emp GROUP BY gender ORDER BY gender;
  2. gender | LAST(first_name, birth_date)
  3. -----------+-------------------------------
  4. null | Eberhardt
  5. F | Valdiodio
  6. M | Hilari
  1. #### Sql
  2. ``````sql
  3. SELECT gender, LAST_VALUE(first_name, birth_date) FROM emp GROUP BY gender ORDER BY gender;
  4. gender | LAST_VALUE(first_name, birth_date)
  5. -----------+-------------------------------------
  6. null | Eberhardt
  7. F | Valdiodio
  8. M | Hilari
  9. `

Sql

  1. SELECT gender, LAST_VALUE(SUBSTRING(first_name, 3, 8), birth_date) AS "last" FROM emp GROUP BY gender ORDER BY gender;
  2. gender | last
  3. ---------------+---------------
  4. null |erhardt
  5. F |ldiodio
  6. M |lari
  1. `````LAST`````は、フィールドが[`````text`````](/read/elasticsearch-8-15/a85566ae42da41c4.md)型の場合を除き、`````saved as a keyword`````句で使用できません。
  2. ## MAX
  3. **概要:**
  4. #### Sql
  5. ``````sql
  6. MAX(field_name)
  7. `

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: 入力と同じ型

説明: フィールドfield_nameの入力値の中で最大の値を返します。

Sql

  1. SELECT MAX(salary) AS max FROM emp;
  2. max
  3. ---------------
  4. 74999

Sql

  1. SELECT MAX(ABS(salary / -12.0)) AS max FROM emp;
  2. max
  3. -----------------
  4. 6249.916666666667
  1. ## MIN
  2. **概要:**
  3. #### Sql
  4. ``````sql
  5. MIN(field_name)
  6. `

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: 入力と同じ型

説明: フィールドfield_nameの入力値の中で最小の値を返します。

Sql

  1. SELECT MIN(salary) AS min FROM emp;
  2. min
  3. ---------------
  4. 25324
  1. ## SUM
  2. **概要:**
  3. #### Sql
  4. ``````sql
  5. SUM(field_name)
  6. `

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: 整数入力の場合はbigint、浮動小数点の場合はdouble

説明: フィールドfield_nameの入力値の合計を返します。

Sql

  1. SELECT SUM(salary) AS sum FROM emp;
  2. sum
  3. ---------------
  4. 4824855

Sql

  1. SELECT ROUND(SUM(salary / 12.0), 1) AS sum FROM emp;
  2. sum
  3. ---------------
  4. 402071.3

統計

KURTOSIS

概要:

Sql

  1. KURTOSIS(field_name)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明:

フィールドfield_nameの入力値の分布の形状を定量化します。

Sql

  1. SELECT MIN(salary) AS min, MAX(salary) AS max, KURTOSIS(salary) AS k FROM emp;
  2. min | max | k
  3. ---------------+---------------+------------------
  4. 25324 |74999 |2.0444718929142986
  1. #### Sql
  2. ``````sql
  3. SELECT KURTOSIS(salary / 12.0), gender FROM emp GROUP BY gender
  4. `

MAD

概要:

Sql

  1. MAD(field_name)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明:

フィールドfield_nameの入力値の変動性を測定します。

Sql

  1. SELECT MIN(salary) AS min, MAX(salary) AS max, AVG(salary) AS avg, MAD(salary) AS mad FROM emp;
  2. min | max | avg | mad
  3. ---------------+---------------+---------------+---------------
  4. 25324 |74999 |48248.55 |10096.5

Sql

  1. SELECT MIN(salary / 12.0) AS min, MAX(salary / 12.0) AS max, AVG(salary/ 12.0) AS avg, MAD(salary / 12.0) AS mad FROM emp;
  2. min | max | avg | mad
  3. ------------------+-----------------+---------------+-----------------
  4. 2110.3333333333335|6249.916666666667|4020.7125 |841.3750000000002

PERCENTILE

概要:

Sql

  1. PERCENTILE(
  2. field_name,
  3. percentile[,
  4. method[,
  5. method_parameter]])

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。
数値式(定数であり、フィールドに基づいてはならない)。もしnullの場合、関数はnullを返します。
パーセンタイルアルゴリズムのためのオプションの文字列リテラル。可能な値: tdigestまたはhdr。デフォルトはtdigestです。
パーセンタイルアルゴリズムを構成するオプションの数値リテラル。compressionのためのtdigestまたはnumber_of_significant_value_digitsのためのhdrを構成します。デフォルトはバックエンドアルゴリズムと同じです。

出力: double 数値

説明:

フィールドfield_nameの入力値のnth パーセンタイルnumeric_expパラメータで表される)を返します。

Sql

  1. SELECT languages, PERCENTILE(salary, 95) AS "95th" FROM emp
  2. GROUP BY languages;
  3. languages | 95th
  4. ---------------+-----------------
  5. null |74482.4
  6. 1 |71122.8
  7. 2 |70271.4
  8. 3 |71926.0
  9. 4 |69352.15
  10. 5 |56371.0

Sql

  1. SELECT languages, PERCENTILE(salary / 12.0, 95) AS "95th" FROM emp
  2. GROUP BY languages;
  3. languages | 95th
  4. ---------------+------------------
  5. null |6206.866666666667
  6. 1 |5926.9
  7. 2 |5855.949999999999
  8. 3 |5993.833333333333
  9. 4 |5779.345833333333
  10. 5 |4697.583333333333

Sql

  1. SELECT
  2. languages,
  3. PERCENTILE(salary, 97.3, 'tdigest', 100.0) AS "97.3_TDigest",
  4. PERCENTILE(salary, 97.3, 'hdr', 3) AS "97.3_HDR"
  5. FROM emp
  6. GROUP BY languages;
  7. languages | 97.3_TDigest | 97.3_HDR
  8. ---------------+-----------------+---------------
  9. null |74720.036 |74992.0
  10. 1 |72316.132 |73712.0
  11. 2 |71792.436 |69936.0
  12. 3 |73326.23999999999|74992.0
  13. 4 |71753.281 |74608.0
  14. 5 |61176.16000000001|56368.0

PERCENTILE_RANK

概要:

Sql

  1. PERCENTILE_RANK(
  2. field_name,
  3. value[,
  4. method[,
  5. method_parameter]])

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。
数値式(定数であり、フィールドに基づいてはならない)。もしnullの場合、関数はnullを返します。
パーセンタイルアルゴリズムのためのオプションの文字列リテラル。可能な値: tdigestまたはhdr。デフォルトはtdigestです。
パーセンタイルアルゴリズムを構成するオプションの数値リテラル。compressionのためのtdigestまたはnumber_of_significant_value_digitsのためのhdrを構成します。デフォルトはバックエンドアルゴリズムと同じです。

出力: double 数値

説明:

フィールドfield_nameの入力値のnth パーセンタイルランクnumeric_expパラメータで表される)を返します。

Sql

  1. SELECT languages, PERCENTILE_RANK(salary, 65000) AS rank FROM emp GROUP BY languages;
  2. languages | rank
  3. ---------------+-----------------
  4. null |73.65766569962062
  5. 1 |73.7291625157734
  6. 2 |88.88005607010643
  7. 3 |79.43662623295829
  8. 4 |85.70446389643493
  9. 5 |96.79075152940749

Sql

  1. SELECT languages, PERCENTILE_RANK(salary/12, 5000) AS rank FROM emp GROUP BY languages;
  2. languages | rank
  3. ---------------+------------------
  4. null |66.91240875912409
  5. 1 |66.70766707667076
  6. 2 |84.13266895048271
  7. 3 |61.052992625621684
  8. 4 |76.55646443990001
  9. 5 |94.00696864111498

Sql

  1. SELECT
  2. languages,
  3. ROUND(PERCENTILE_RANK(salary, 65000, 'tdigest', 100.0), 2) AS "rank_TDigest",
  4. ROUND(PERCENTILE_RANK(salary, 65000, 'hdr', 3), 2) AS "rank_HDR"
  5. FROM emp
  6. GROUP BY languages;
  7. languages | rank_TDigest | rank_HDR
  8. ---------------+---------------+---------------
  9. null |73.66 |80.0
  10. 1 |73.73 |73.33
  11. 2 |88.88 |89.47
  12. 3 |79.44 |76.47
  13. 4 |85.7 |83.33
  14. 5 |96.79 |95.24

SKEWNESS

概要:

Sql

  1. SKEWNESS(field_name)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明:

フィールドfield_nameの入力値の非対称分布を定量化します。

Sql

  1. SELECT MIN(salary) AS min, MAX(salary) AS max, SKEWNESS(salary) AS s FROM emp;
  2. min | max | s
  3. ---------------+---------------+------------------
  4. 25324 |74999 |0.2707722118423227
  1. #### Sql
  2. ``````sql
  3. SELECT SKEWNESS(ROUND(salary / 12.0, 2), gender FROM emp GROUP BY gender
  4. `

STDDEV_POP

概要:

Sql

  1. STDDEV_POP(field_name)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明:

フィールドfield_nameの入力値の母集団標準偏差を返します。

Sql

  1. SELECT MIN(salary) AS min, MAX(salary) AS max, STDDEV_POP(salary) AS stddev FROM emp;
  2. min | max | stddev
  3. ---------------+---------------+------------------
  4. 25324 |74999 |13765.125502787832

Sql

  1. SELECT MIN(salary / 12.0) AS min, MAX(salary / 12.0) AS max, STDDEV_POP(salary / 12.0) AS stddev FROM emp;
  2. min | max | stddev
  3. ------------------+-----------------+-----------------
  4. 2110.3333333333335|6249.916666666667|1147.093791898986

STDDEV_SAMP

概要:

Sql

  1. STDDEV_SAMP(field_name)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明:

フィールドfield_nameの入力値のサンプル標準偏差を返します。

Sql

  1. SELECT MIN(salary) AS min, MAX(salary) AS max, STDDEV_SAMP(salary) AS stddev FROM emp;
  2. min | max | stddev
  3. ---------------+---------------+------------------
  4. 25324 |74999 |13834.471662090747

Sql

  1. SELECT MIN(salary / 12.0) AS min, MAX(salary / 12.0) AS max, STDDEV_SAMP(salary / 12.0) AS stddev FROM emp;
  2. min | max | stddev
  3. ------------------+-----------------+-----------------
  4. 2110.3333333333335|6249.916666666667|1152.872638507562

SUM_OF_SQUARES

概要:

Sql

  1. SUM_OF_SQUARES(field_name)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明:

フィールドfield_nameの入力値の二乗和を返します。

Sql

  1. SELECT MIN(salary) AS min, MAX(salary) AS max, SUM_OF_SQUARES(salary) AS sumsq
  2. FROM emp;
  3. min | max | sumsq
  4. ---------------+---------------+----------------
  5. 25324 |74999 |2.51740125721E11

Sql

  1. SELECT MIN(salary / 24.0) AS min, MAX(salary / 24.0) AS max, SUM_OF_SQUARES(salary / 24.0) AS sumsq FROM emp;
  2. min | max | sumsq
  3. ------------------+------------------+-------------------
  4. 1055.1666666666667|3124.9583333333335|4.370488293767361E8

VAR_POP

概要:

Sql

  1. VAR_POP(field_name)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明:

フィールドfield_nameの入力値の母集団分散を返します。

Sql

  1. SELECT MIN(salary) AS min, MAX(salary) AS max, VAR_POP(salary) AS varpop FROM emp;
  2. min | max | varpop
  3. ---------------+---------------+----------------
  4. 25324 |74999 |1.894786801075E8

Sql

  1. SELECT MIN(salary / 24.0) AS min, MAX(salary / 24.0) AS max, VAR_POP(salary / 24.0) AS varpop FROM emp;
  2. min | max | varpop
  3. ------------------+------------------+------------------
  4. 1055.1666666666667|3124.9583333333335|328956.04185329855

VAR_SAMP

概要:

Sql

  1. VAR_SAMP(field_name)

入力:

数値フィールド。このフィールドにnull値のみが含まれている場合、関数はnullを返します。そうでない場合、関数はこのフィールドのnull値を無視します。

出力: double 数値

説明:

フィールドfield_nameの入力値のサンプル分散を返します。

Sql

  1. SELECT MIN(salary) AS min, MAX(salary) AS max, VAR_SAMP(salary) AS varsamp FROM emp;
  2. min | max | varsamp
  3. ---------------+---------------+----------------
  4. 25324 |74999 |1.913926061691E8

Sql

  1. SELECT MIN(salary / 24.0) AS min, MAX(salary / 24.0) AS max, VAR_SAMP(salary / 24.0) AS varsamp FROM emp;
  2. min | max | varsamp
  3. ------------------+------------------+----------------
  4. 1055.1666666666667|3124.9583333333335|332278.830154847