| 名前 | 説明 |
|---|---|
AVG() |
引数の平均値を返します |
BIT_AND() |
ビット単位の論理積を返します |
BIT_OR() |
ビット単位の論理和を返します |
BIT_XOR()(v4.1.1) |
ビット単位の排他的論理和を返します |
COUNT(DISTINCT) |
異なる値のカウント数を返します |
COUNT() |
返された行のカウント数を返します |
GROUP_CONCAT()(v4.1) |
連結した文字列を返します |
MAX() |
最大値を返します |
MIN() |
最小値を返します |
STD() |
母標準偏差を返します |
STDDEV_POP()(v5.0.3) |
母標準偏差を返します |
STDDEV_SAMP()(v5.0.3) |
標本標準偏差を返します |
STDDEV() |
母標準偏差を返します |
SUM() |
合計を返します |
VAR_POP()(v5.0.3) |
母標準分散を返します |
VAR_SAMP()(v5.0.3) |
標本分散を返します |
VARIANCE()(v4.1) |
母標準分散を返します |
この節では、値のセットを演算するグループ
(集約)
関数について説明します。特別に説明されていないかぎり、グループ関数は
NULL 値を無視します。
GROUP BY
節を含まないステートメントでグループ関数を使用する場合、すべての行をグループ分けするのと同様の効果になります。詳細は
項7.12.3. 「非常時カラムとの GROUP BY
および HAVING」
をご覧ください。
数値引数では、分散値と標準偏差関数が
DOUBLE
値を返します。SUM()
および AVG()
関数は、高精度値引数 (整数または
DECIMAL)
に対して
DECIMAL
値を返し、近似値引数
(FLOAT または
DOUBLE)
に対して
DOUBLE
値を返します。
SUM() および
AVG()
集約関数は、時間値とはうまく作動しません。(これらは値を数字に変換するので、最初の非数字キャラクタの後の情報がすべて失われてしまう)
この問題を回避するには、数値ユニットを変換し、集約演算を行い、時間値に変換し直すという方法があります。例:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROMtbl_name; SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROMtbl_name;
数値引数を取る
SUM() や
AVG()
などの関数は、必要に応じて引数を数値にキャストします。SET
や ENUM
値の場合、このキャスト演算によってその背後の数値が使用されます。
の平均値を返します。exprexpr
の固有値の平均を返すのに、DISTINCT
オプションを使用することができます。
一致する行がない場合、AVG()
は NULL
を返します。
mysql>SELECT student_name, AVG(test_score)->FROM student->GROUP BY student_name;
expr
内のすべてのビットの、ビット単位の
AND
を返します。計算は 64 ビット
(BIGINT)
の精度で行われます。
この関数は、一致する行がない場合は、18446744073709551615
を返します。(これは、すべてのビットが 1
に設定された、符号なしの
BIGINT
値の値です)。
expr
内のすべてのビットの、ビット単位の
OR
を返します。計算は 64 ビット
(BIGINT)
の精度で行われます。
この関数は、一致する行がない場合は、0
を返します。
expr
内のすべてのビットの、ビット単位の
XOR
を返します。計算は 64 ビット
(BIGINT)
の精度で行われます。
この関数は、一致する行がない場合は、0
を返します。
SELECT
ステートメントによって引き出された行に含まれる、expr
の非 NULL
値の数を返します。結果は
BIGINT
値になります。
一致する行がない場合、COUNT()
は 0 を返します。
mysql>SELECT student.student_name,COUNT(*)->FROM student,course->WHERE student.student_id=course.student_id->GROUP BY student_name;
COUNT(*)
は、NULL
値を含む含まざるに関わらず、引き出された行の数を返すという点でやや異なります。
COUNT(*)
は、SELECT
がひとつのテーブルから検索し、ほかのカラムは引き出されず、また
WHERE
カラムがない場合、きわめて素早く戻すよう最適化されています。例
:
mysql> SELECT COUNT(*) FROM student;
この最適化は、正確な行の数がこの保存エンジンに保管されており、素早いアクセスが可能なため、MyISAM
テーブルにのみ適用します。InnoDB
をはじめとするトランザクション保存エンジンに関しては、正確な行の数を保存するのは、複数のトランザクションが起こって、それぞれが行の係数に影響をおよぼす場合があるため、より困難になります。
COUNT(DISTINCT
expr,[expr...])
異なる非 NULL
値の数を返します。
一致する行がない場合、COUNT(DISTINCT)
は 0 を返します。
mysql> SELECT COUNT(DISTINCT results) FROM student;
MySQL
では、式のリストを提供することにより、NULL
を含まない、異なる式のコンビネーションの数を得ることができます。標準
SQL
では、COUNT(DISTINCT
...)
内で、すべての式の連結を行わなければなりません。
この関数は、グループからの連結された非
NULL
値を伴う文字列結果を返します。非
NULL
値がない場合は
NULL
を返します。全構文は次の通りです :
GROUP_CONCAT([DISTINCT]expr[,expr...] [ORDER BY {unsigned_integer|col_name|expr} [ASC | DESC] [,col_name...]] [SEPARATORstr_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
節を使用してください。逆順でソートするには、DESC
(降順) キーワードを、ORDER
BY
節のソートするカラムの名前に加えてください。デフォルトでは昇順になっています。これは、ASC
を使うことで明示的に指定することができます。SEPARATOR
の後には、結果の値の間に挿入されるべき文字列値が続きます。デフォルトはコンマ
(「,」)
です。SEPARATOR ''
を使用すると、セパレータを一挙に取り除くことができます。
結果は
group_concat_max_len
システム変数に指定された最大長までに切り詰められますが、そのデフォルト値は
1024
です。この値を大きくしてもかまいませんが、戻り値の実際の最大長は、max_allowed_packet
の値によって制約されます。実行時に
group_concat_max_len
の値を変更するための構文は、次のとおりです。ただし、val
は符号なしの整数です。
SET [GLOBAL | SESSION] group_concat_max_len
= val;
CONCAT()
および
CONCAT_WS()
も併せてご覧ください :
項7.4. 「文字列関数」.
expr
の最大値を返します。MAX()
は文字列引数を取ることができますが、そのような場合は最大文字列値を返します。項4.4.4. 「MySQL におけるインデックスの使用」
を参照してください。DISTINCT
キーワードで expr
の固有の値の最大を検出できますが、その場合、DISTINCT
を省略した場合と同じ結果を生成します。
一致する行がない場合、MAX()
は NULL
を返します。
mysql>SELECT student_name, MIN(test_score), MAX(test_score)->FROM student->GROUP BY student_name;
MAX()
に関しては、MySQL
は現在、ENUM
と SET
カラムを、セット内でのそれらの文字列の相対位置によってではなく、文字列値によって比較しています。これは、ORDER
BY
がそれらをどう比較するかによって異なります。この点は、将来の
MySQL リリースに反映される予定です。
expr
の最小値を返します。MIN()
は文字列引数を取ることができますが、そのような場合は最小文字列値を返します。項4.4.4. 「MySQL におけるインデックスの使用」
を参照してください。DISTINCT
キーワードで expr
の固有の値の最小を検出できますが、その場合、DISTINCT
を省略した場合と同じ結果を生成します。
一致する行がない場合、MIN()
は NULL
を返します。
mysql>SELECT student_name, MIN(test_score), MAX(test_score)->FROM student->GROUP BY student_name;
MIN()
に関しては、MySQL
は現在、ENUM
と SET
カラムを、セット内でのそれらの文字列の相対位置によってではなく、文字列値によって比較しています。これは、ORDER
BY
がそれらをどう比較するかによって異なります。この点は、将来の
MySQL リリースに反映される予定です。
expr
の母標準偏差を返します。これは標準 SQL
へのエクステンションです。標準 SQL 関数
STDDEV_POP()
を代わりに使用することも可能です。
この関数は、一致する行がない場合は、NULL
を返します。
expr
の母標準偏差を返します。この関数は、Oracle
との互換性を確保するために提供されています。標準
SQL 関数
STDDEV_POP()
を代わりに使用することも可能です。
この関数は、一致する行がない場合は、NULL
を返します。
expr の母標準偏差
(VAR_POP()
の平方根)
を返します。STD()
または
STDDEV()
を使用することもできます。これらは同等ですが標準
SQL ではありません。
一致する行がない場合、STDDEV_POP()
は NULL
を返します。
expr の標本標準偏差
(VAR_SAMP()
の平方根) を返します。
一致する行がない場合、STDDEV_SAMP()
は NULL
を返します。
expr
の集計を返します。返しセットが行を持たない場合、SUM()
は NULL
を返します。MySQL 5.1 で
DISTINCT
を使用して、expr
の重複しない値のみを集計することができます。
一致する行がない場合、SUM()
は NULL
を返します。
expr
の母標準分散を返します。行をサンプルではなく全母集団としてとらえ、行の数を分母として得ます。また、VARIANCE()
を使用することもできます。これは同等ですが標準
SQL ではありません。
一致する行がない場合、VAR_POP()
は NULL
を返します。
expr
の標本分散を返します。この分母は行の数から
1 をひいたものです。
一致する行がない場合、VAR_SAMP()
は NULL
を返します。
expr
の母標準分散を返します。これは標準 SQL
へのエクステンションです。標準 SQL 関数
VAR_POP()
を代わりに使用することも可能です。
一致する行がない場合、VARIANCE()
は NULL
を返します。
