このページは機械翻訳したものです。
このセクションでは、値のセットを操作する集計関数について説明します。 多くの場合、値をサブセットにグループ化するために GROUP BY 句とともに使用されます。
表 12.25 「集計関数」
| 名前 | 説明 |
|---|---|
AVG() |
引数の平均値を返します |
BIT_AND() |
ビット単位 AND を返します |
BIT_OR() |
ビット単位の OR を返します |
BIT_XOR() |
ビット単位 XOR を返します |
COUNT() |
返された行数のカウントを返します |
COUNT(DISTINCT) |
異なる値のカウントを返します |
GROUP_CONCAT() |
連結された文字列を返します |
JSON_ARRAYAGG() |
結果セットを単一の JSON 配列として返します |
JSON_OBJECTAGG() |
結果セットを単一の JSON オブジェクトとして返します |
MAX() |
最大値を返します |
MIN() |
最小値を返します |
STD() |
母標準偏差を返します |
STDDEV() |
母標準偏差を返します |
STDDEV_POP() |
母標準偏差を返します |
STDDEV_SAMP() |
標本標準偏差を返します |
SUM() |
集計を返します |
VAR_POP() |
母標準分散を返します |
VAR_SAMP() |
標本分散を返します |
VARIANCE() |
母標準分散を返します |
特に明記されていないかぎり、集計関数は NULL 値を無視します。
GROUP BY 句を含まないステートメントで集計関数を使用する場合、すべての行でのグループ化と同等です。 詳細は、セクション12.20.3「MySQL での GROUP BY の処理」を参照してください。
ほとんどの集計関数は、ウィンドウ関数として使用できます。 この方法で使用できるものは、オプションの OVER 句を表す[の構文の説明で示されます。over_clause]over_clause は セクション12.21.2「Window 関数の概念と構文」 で説明されており、ウィンドウ関数の使用方法に関するその他の情報も含まれています。
数値の引数の場合、分散および標準偏差関数が DOUBLE 値を返します。 SUM() および AVG() 関数は、正確な値の引数 (整数または DECIMAL) の場合は DECIMAL 値を返し、近似値の引数 (FLOAT または DOUBLE) の場合は DOUBLE 値を返します。
SUM() および AVG() 集計関数は時間値を扱いません。 (これらは値を数字に変換するので、最初の数字以外の文字のあとのすべての情報が失われます。) この問題を回避するには、数値単位に変換し、集計操作を実行してから、時間値に戻します。 例:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;
数値引数を取る SUM() や AVG() などの関数は、必要に応じて引数を数値にキャストします。 SET や ENUM 値の場合、キャスト演算でベースとなる数値が使用されます。
BIT_AND()、BIT_OR() および BIT_XOR() の集計関数は、ビット操作を実行します。 MySQL 8.0 より前では、ビット関数および演算子には BIGINT (64-bit 整数) 引数が必要であり、BIGINT 値が返されるため、最大範囲は 64 ビットでした。 操作の実行前に BIGINT 以外の引数が BIGINT に変換され、切捨てが発生する可能性があります。
MySQL 8.0 では、ビット関数および演算子はバイナリ文字列型の引数 (BINARY、VARBINARY および BLOB 型) を許可し、同様の型の値を返します。これにより、引数を受け取り、64 ビットを超える戻り値を生成できます。 ビット操作の引数評価および結果タイプの詳細は、セクション12.13「ビット関数と演算子」 の概要を参照してください。
-
AVG([DISTINCT]expr) [over_clause]の平均値を返します。exprDISTINCTオプションを使用すると、個別のexpr値の平均を返すことができます。一致する行がない場合、
AVG()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは、セクション12.21.2「Window 関数の概念と構文」 で説明されているように、DISTINCTでは使用できません。mysql> SELECT student_name, AVG(test_score) FROM student GROUP BY student_name; -
BIT_AND(expr) [over_clause]expr内のすべてのビットのビット単位のANDを返します。結果の型は、関数の引数値がバイナリ文字列として評価されるか、数値として評価されるかによって異なります:
バイナリ文字列の評価は、引数値がバイナリ文字列型で、引数が 16 進数リテラル、ビットリテラルまたは
NULLリテラルでない場合に発生します。 それ以外の場合は数値の評価が行われ、必要に応じて引数値が符号なし 64 ビット整数に変換されます。バイナリ文字列の評価では、引数値と同じ長さのバイナリ文字列が生成されます。 引数値の長さが等しくない場合は、
ER_INVALID_BITWISE_OPERANDS_SIZEエラーが発生します。 引数のサイズが 511 バイトを超えると、ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZEエラーが発生します。 数値評価では符号なし 64 ビット整数が生成されます。
一致する行がない場合、
BIT_AND()は引数値と同じ長さのニュートラル値 (すべて 1 に設定されたビット) を返します。すべての値が
NULLでないかぎり、NULL値は結果に影響しません。 その場合、結果は引数値と同じ長さの中立値になります。引数の評価および結果タイプの詳細は、セクション12.13「ビット関数と演算子」 の概要に関する説明を参照してください。
MySQL 8.0.12 では、
over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは セクション12.21.2「Window 関数の概念と構文」 で説明されているとおりです。 -
BIT_OR(expr) [over_clause]expr内のすべてのビットのビット単位のORを返します。結果の型は、関数の引数値がバイナリ文字列として評価されるか、数値として評価されるかによって異なります:
バイナリ文字列の評価は、引数値がバイナリ文字列型で、引数が 16 進数リテラル、ビットリテラルまたは
NULLリテラルでない場合に発生します。 それ以外の場合は数値の評価が行われ、必要に応じて引数値が符号なし 64 ビット整数に変換されます。バイナリ文字列の評価では、引数値と同じ長さのバイナリ文字列が生成されます。 引数値の長さが等しくない場合は、
ER_INVALID_BITWISE_OPERANDS_SIZEエラーが発生します。 引数のサイズが 511 バイトを超えると、ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZEエラーが発生します。 数値評価では符号なし 64 ビット整数が生成されます。
一致する行がない場合、
BIT_OR()は引数値と同じ長さのニュートラル値 (すべて 0 に設定されたビット) を返します。すべての値が
NULLでないかぎり、NULL値は結果に影響しません。 その場合、結果は引数値と同じ長さの中立値になります。引数の評価および結果タイプの詳細は、セクション12.13「ビット関数と演算子」 の概要に関する説明を参照してください。
MySQL 8.0.12 では、
over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは セクション12.21.2「Window 関数の概念と構文」 で説明されているとおりです。 -
BIT_XOR(expr) [over_clause]expr内のすべてのビットのビット単位のXORを返します。結果の型は、関数の引数値がバイナリ文字列として評価されるか、数値として評価されるかによって異なります:
バイナリ文字列の評価は、引数値がバイナリ文字列型で、引数が 16 進数リテラル、ビットリテラルまたは
NULLリテラルでない場合に発生します。 それ以外の場合は数値の評価が行われ、必要に応じて引数値が符号なし 64 ビット整数に変換されます。バイナリ文字列の評価では、引数値と同じ長さのバイナリ文字列が生成されます。 引数値の長さが等しくない場合は、
ER_INVALID_BITWISE_OPERANDS_SIZEエラーが発生します。 引数のサイズが 511 バイトを超えると、ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZEエラーが発生します。 数値評価では符号なし 64 ビット整数が生成されます。
一致する行がない場合、
BIT_XOR()は引数値と同じ長さのニュートラル値 (すべて 0 に設定されたビット) を返します。すべての値が
NULLでないかぎり、NULL値は結果に影響しません。 その場合、結果は引数値と同じ長さの中立値になります。引数の評価および結果タイプの詳細は、セクション12.13「ビット関数と演算子」 の概要に関する説明を参照してください。
MySQL 8.0.12 では、
over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは セクション12.21.2「Window 関数の概念と構文」 で説明されているとおりです。 -
COUNT(expr) [over_clause]SELECTステートメントで取得された行に含まれるexprの非NULL値の数を返します。 結果はBIGINT値になります。一致する行がない場合、
COUNT()は0を返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseについては、セクション12.21.2「Window 関数の概念と構文」 を参照してください。mysql> SELECT student.student_name,COUNT(*) FROM student,course WHERE student.student_id=course.student_id GROUP BY student_name;COUNT(*)は、NULL値が含まれるかどうかに関係なく、取得された行の数を返すという点で少し異なります。InnoDBなどのトランザクションストレージエンジンでは、正確な行数の格納に問題があります。 複数のトランザクションが同時に発生する可能性があり、それぞれがカウントに影響する可能性があります。並列トランザクションでは同時にさまざまな数の行が「参照」される可能性があるため、
InnoDBのテーブルには、行の内部的なカウントが保持されません。 したがって、SELECT COUNT(*)ステートメントでは、現在のトランザクションで参照可能な行のみがカウントされます。MySQL 8.0.13 では、
WHERE、GROUP BYなどの追加句がない場合、InnoDBテーブルのSELECT COUNT(*) FROMクエリーパフォーマンスはシングルスレッドワークロード用に最適化されます。tbl_nameInnoDBは、インデックスまたはオプティマイザヒントがオプティマイザに別のインデックスを使用するように指示しないかぎり、使用可能な最小のセカンダリインデックスを横断することでSELECT COUNT(*)ステートメントを処理します。 セカンダリインデックスが存在しない場合、InnoDBはクラスタインデックスをスキャンしてSELECT COUNT(*)ステートメントを処理します。インデックスレコードがバッファプールに完全に含まれていない場合、
SELECT COUNT(*)ステートメントの処理には時間がかかります。 カウントを高速化するには、カウンタテーブルを作成し、挿入および削除に従ってカウンタテーブルを更新できるようにします。 ただし、何千もの同時トランザクションが同じカウンタテーブルへの更新を開始している状況では、この方法は適切にスケーリングされない場合があります。 概算の行数で十分な場合は、SHOW TABLE STATUSを使用します。InnoDBは、SELECT COUNT(*)とSELECT COUNT(1)の操作を同じ方法で処理します。 パフォーマンスに違いはありません。MyISAMテーブルの場合、COUNT(*)は、SELECTがあるテーブルから取得し、他のカラムが取得されず、WHERE句がない場合に非常に迅速に返すように最適化されます。 例:mysql> SELECT COUNT(*) FROM student;この最適化は
MyISAMテーブルにのみ適用されます。これは、正確な行数がこのストレージエンジン用に格納され、非常に迅速にアクセスできるためです。COUNT(1)は、最初のカラムがNOT NULLとして定義されている場合にのみ、同じ最適化の対象となります。 -
COUNT(DISTINCTexpr,[expr...])さまざまな非
NULLexpr値を含む行の数を返します。一致する行がない場合、
COUNT(DISTINCT)は0を返します。mysql> SELECT COUNT(DISTINCT results) FROM student;MySQL では、式のリストを指定することで、
NULLが含まれない個別の式の組み合わせ数を取得できます。 標準 SQL では、COUNT(DISTINCT ...)内部で、すべての式の連結を行う必要があります。 -
GROUP_CONCAT(expr)この関数は、グループから連結された非
NULL値を含む文字列の結果を返します。 非NULL値がない場合は、NULLを返します。 完全な構文は次のとおりです。GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])mysql> SELECT student_name, GROUP_CONCAT(test_score) FROM student GROUP BY student_name;または:
mysql> SELECT student_name, GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ') FROM student GROUP BY student_name;MySQL では、式の組み合わせを連結した値を取得できます。 重複する値を除去するには、
DISTINCT句を使用します。 結果の値をソートするには、ORDER BY句を使用します。 逆順でソートするには、ORDER BY句のソートするカラムの名前にDESC(降順) キーワードを追加します。 デフォルトは昇順です。これは、ASCキーワードを使用することで明示的に指定できます。 グループ内の値間のデフォルトの区切り文字は、カンマ (,) です。 区切り文字を明示的に指定するには、SEPARATORに続けて、グループ値の間に挿入される文字列リテラル値を指定します。 区切り文字を完全に除去するには、SEPARATOR ''を指定します。結果は、
group_concat_max_lenシステム変数で指定された最大長まで切り捨てられます。その変数のデフォルト値は 1024 です。 さらに高い値にも設定できますが、戻り値の有効な最大長は、max_allowed_packetの値によって制約されます。 実行時にgroup_concat_max_lenの値を変更するための構文は、次のとおりです。ここで、valは符号なし整数です。SET [GLOBAL | SESSION] group_concat_max_len = val;戻り値は、引数が非バイナリとバイナリのどちらの文字列であるのかに応じて、非バイナリ文字列またはバイナリ文字列になります。 結果の型は、
group_concat_max_lenが 512 以下の場合 (この場合、結果の型はVARCHARまたはVARBINARYです) を除いて、TEXTまたはBLOBです。CONCAT()およびCONCAT_WS(): セクション12.8「文字列関数および演算子」も参照してください。 -
JSON_ARRAYAGG(col_or_expr) [over_clause]結果セットを、要素が行で構成される単一の
JSON配列として集計します。 この配列の要素の順序が定義されていません。 この関数は、単一の値に評価されるカラムまたは式に対して機能します。 結果に行が含まれていない場合、またはエラーが発生した場合は、NULLを返します。MySQL 8.0.14 では、
over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは セクション12.21.2「Window 関数の概念と構文」 で説明されているとおりです。mysql> SELECT o_id, attribute, value FROM t3; +------+-----------+-------+ | o_id | attribute | value | +------+-----------+-------+ | 2 | color | red | | 2 | fabric | silk | | 3 | color | green | | 3 | shape | square| +------+-----------+-------+ 4 rows in set (0.00 sec) mysql> SELECT o_id, JSON_ARRAYAGG(attribute) AS attributes > FROM t3 GROUP BY o_id; +------+---------------------+ | o_id | attributes | +------+---------------------+ | 2 | ["color", "fabric"] | | 3 | ["color", "shape"] | +------+---------------------+ 2 rows in set (0.00 sec) -
JSON_OBJECTAGG(key,value) [over_clause]2 つのカラム名または式を引数として取ります。最初のカラム名または式はキーとして使用され、2 番目のカラム名または式は値として使用され、キーと値のペアを含む JSON オブジェクトを返します。 結果に行が含まれていない場合、またはエラーが発生した場合は、
NULLを返します。 いずれかのキー名がNULLであるか、引数の数が 2 でない場合、エラーが発生します。MySQL 8.0.14 では、
over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは セクション12.21.2「Window 関数の概念と構文」 で説明されているとおりです。mysql> SELECT o_id, attribute, value FROM t3; +------+-----------+-------+ | o_id | attribute | value | +------+-----------+-------+ | 2 | color | red | | 2 | fabric | silk | | 3 | color | green | | 3 | shape | square| +------+-----------+-------+ 4 rows in set (0.00 sec) mysql> SELECT o_id, JSON_OBJECTAGG(attribute, value) > FROM t3 GROUP BY o_id; +------+---------------------------------------+ | o_id | JSON_OBJECTAGG(attribute, value) | +------+---------------------------------------+ | 2 | {"color": "red", "fabric": "silk"} | | 3 | {"color": "green", "shape": "square"} | +------+---------------------------------------+ 2 rows in set (0.00 sec)重複キーの処理. この関数の結果が正規化されると、重複するキーを持つ値は破棄されます。 重複キーを許可しない MySQL
JSONデータ型指定に従うと、返されるオブジェクト (「「最後の重複キー優先」」) でそのキーで最後に検出された値のみが使用されます。 つまり、SELECTのカラムでこの関数を使用した結果は、戻される行の順序に依存する可能性がありますが、これは保証されていません。ウィンドウ関数として使用する場合、フレーム内に重複するキーがあると、そのキーの最後の値のみが結果に表示されます。
ORDER BY仕様で値が特定の順序であることが保証されている場合、フレームの最後の行のキーの値は決定的です。 そうでない場合、キーの結果値は非決定的です。次について考えます。
mysql> CREATE TABLE t(c VARCHAR(10), i INT); Query OK, 0 rows affected (0.33 sec) mysql> INSERT INTO t VALUES ('key', 3), ('key', 4), ('key', 5); Query OK, 3 rows affected (0.10 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT c, i FROM t; +------+------+ | c | i | +------+------+ | key | 3 | | key | 4 | | key | 5 | +------+------+ 3 rows in set (0.00 sec) mysql> SELECT JSON_OBJECTAGG(c, i) FROM t; +----------------------+ | JSON_OBJECTAGG(c, i) | +----------------------+ | {"key": 5} | +----------------------+ 1 row in set (0.00 sec) mysql> DELETE FROM t; Query OK, 3 rows affected (0.08 sec) mysql> INSERT INTO t VALUES ('key', 3), ('key', 5), ('key', 4); Query OK, 3 rows affected (0.06 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> SELECT c, i FROM t; +------+------+ | c | i | +------+------+ | key | 3 | | key | 5 | | key | 4 | +------+------+ 3 rows in set (0.00 sec) mysql> SELECT JSON_OBJECTAGG(c, i) FROM t; +----------------------+ | JSON_OBJECTAGG(c, i) | +----------------------+ | {"key": 4} | +----------------------+ 1 row in set (0.00 sec)最後のクエリーから選択されたキーは非決定的です。 特定のキーの順序付けが必要な場合は、フレーム行に特定の順序を適用する
ORDER BY仕様にOVER句を含めることで、JSON_OBJECTAGG()をウィンドウ関数として起動できます。 次の例は、いくつかの異なるフレーム仕様について、ORDER BYの有無に応じて何が起こるかを示しています。ORDER BYがない場合、フレームはパーティション全体です:mysql> SELECT JSON_OBJECTAGG(c, i) OVER () AS json_object FROM t; +-------------+ | json_object | +-------------+ | {"key": 4} | | {"key": 4} | | {"key": 4} | +-------------+ORDER BYでは、フレームはデフォルトのRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(昇順と降順の両方) です:mysql> SELECT JSON_OBJECTAGG(c, i) OVER (ORDER BY i) AS json_object FROM t; +-------------+ | json_object | +-------------+ | {"key": 3} | | {"key": 4} | | {"key": 5} | +-------------+ mysql> SELECT JSON_OBJECTAGG(c, i) OVER (ORDER BY i DESC) AS json_object FROM t; +-------------+ | json_object | +-------------+ | {"key": 5} | | {"key": 4} | | {"key": 3} | +-------------+ORDER BYおよびパーティション全体の明示的なフレームを使用する場合:mysql> SELECT JSON_OBJECTAGG(c, i) OVER (ORDER BY i ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS json_object FROM t; +-------------+ | json_object | +-------------+ | {"key": 5} | | {"key": 5} | | {"key": 5} | +-------------+特定のキー値 (最小値や最大値など) を返すには、適切なクエリーに
LIMIT句を含めます。 例:mysql> SELECT JSON_OBJECTAGG(c, i) OVER (ORDER BY i) AS json_object FROM t LIMIT 1; +-------------+ | json_object | +-------------+ | {"key": 3} | +-------------+ mysql> SELECT JSON_OBJECTAGG(c, i) OVER (ORDER BY i DESC) AS json_object FROM t LIMIT 1; +-------------+ | json_object | +-------------+ | {"key": 5} | +-------------+追加情報および例については、JSON 値の正規化、マージおよび自動ラップを参照してください。
-
MAX([DISTINCT]expr) [over_clause]exprの最大値を返します。MAX()には、文字列の引数を指定できます。このような場合は、最大の文字列値が返されます。 セクション8.3.1「MySQL のインデックスの使用の仕組み」を参照してください。DISTINCTキーワードを使用すると、個別のexpr値の最大を検索できます。ただし、DISTINCTを省略した場合と同じ結果が生成されます。一致する行がない場合、
MAX()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは、セクション12.21.2「Window 関数の概念と構文」 で説明されているように、DISTINCTでは使用できません。mysql> SELECT student_name, MIN(test_score), MAX(test_score) FROM student GROUP BY student_name;現在、MySQL の
MAX()では、ENUMとSETカラムが、セット内の文字列の相対位置ではなく、文字列値について比較されます。 これは、ORDER BYによる比較方法とは異なります。 -
MIN([DISTINCT]expr) [over_clause]exprの最小値を返します。MIN()には、文字列の引数を指定できます。このような場合は、最小の文字列値が返されます。 セクション8.3.1「MySQL のインデックスの使用の仕組み」を参照してください。DISTINCTキーワードを使用すると、個別のexpr値の最小を検索できます。ただし、DISTINCTを省略した場合と同じ結果が生成されます。一致する行がない場合、
MIN()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは、セクション12.21.2「Window 関数の概念と構文」 で説明されているように、DISTINCTでは使用できません。mysql> SELECT student_name, MIN(test_score), MAX(test_score) FROM student GROUP BY student_name;現在、MySQL の
MIN()では、ENUMとSETカラムが、セット内の文字列の相対位置ではなく、文字列値について比較されます。 これは、ORDER BYによる比較方法とは異なります。 -
STD(expr) [over_clause]exprの母標準偏差を返します。STD()は、MySQL 拡張機能として提供される標準 SQL 関数STDDEV_POP()のシノニムです。一致する行がない場合、
STD()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseについては、セクション12.21.2「Window 関数の概念と構文」 を参照してください。 -
STDDEV(expr) [over_clause]exprの母標準偏差を返します。STDDEV()は、Oracle との互換性のために提供されている標準 SQL 関数STDDEV_POP()のシノニムです。一致する行がない場合、
STDDEV()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseについては、セクション12.21.2「Window 関数の概念と構文」 を参照してください。 -
STDDEV_POP(expr) [over_clause]exprの母標準偏差 (VAR_POP()の平方根) を返します。STD()またはSTDDEV()を使用することもできます。これらは同等ですが、標準 SQL ではありません。一致する行がない場合、
STDDEV_POP()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseについては、セクション12.21.2「Window 関数の概念と構文」 を参照してください。 -
STDDEV_SAMP(expr) [over_clause]exprの標本標準偏差 (VAR_SAMP()の平方根) を返します。一致する行がない場合、
STDDEV_SAMP()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseについては、セクション12.21.2「Window 関数の概念と構文」 を参照してください。 -
SUM([DISTINCT]expr) [over_clause]exprの集計を返します。 戻り値のセットに行が含まれていない場合、SUM()はNULLを返します。DISTINCTキーワードを使用すると、個別のexpr値のみを集計できます。一致する行がない場合、
SUM()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseは、セクション12.21.2「Window 関数の概念と構文」 で説明されているように、DISTINCTでは使用できません。 -
VAR_POP(expr) [over_clause]exprの母標準分散を返します。 行は標本ではなく、母集団全体とみなされるため、行の数が分母とみなされます。 また、VARIANCE()を使用することもできます。これは同等ですが、標準 SQL ではありません。一致する行がない場合、
VAR_POP()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseについては、セクション12.21.2「Window 関数の概念と構文」 を参照してください。 -
VAR_SAMP(expr) [over_clause]exprの標本分散を返します。 つまり、分母は行の数から 1 を引いたものです。一致する行がない場合、
VAR_SAMP()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseについては、セクション12.21.2「Window 関数の概念と構文」 を参照してください。 -
VARIANCE(expr) [over_clause]exprの母標準分散を返します。VARIANCE()は、MySQL 拡張機能として提供される標準 SQL 関数VAR_POP()のシノニムです。一致する行がない場合、
VARIANCE()はNULLを返します。over_clauseが存在する場合、この関数はウィンドウ関数として実行されます。over_clauseについては、セクション12.21.2「Window 関数の概念と構文」 を参照してください。