名前 | 説明 |
---|---|
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
値の場合、このキャスト演算によってその背後の数値が使用されます。
の平均値を返します。expr
expr
の固有値の平均を返すのに、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
を返します。