GROUP BY
節を含まないステートメントでグループ関数を使用すると、すべてのレコードに対してグループ化操作を実行するのと同じになります。
AVG(expr)
expr
の平均値を返す。
mysql>SELECT student_name, AVG(test_score)
->FROM student
->GROUP BY student_name;
BIT_AND(expr)
expr
のすべてのビットに対するビットごとの
AND
を返す。この計算は 64
ビット(BIGINT
)の精度で実行される。
MySQL 4.0.17
以降では、マッチするレコードがない場合、この関数は
18446744073709551615
を返す(これはすべてのビットを 1
に設定した、符号なしの
BIGINT
値)。 4.0.17
より前のバージョンでは、マッチするレコードがない場合、この関数は
-1 を返す。
BIT_OR(expr)
expr
のすべてのビットに対するビットごとの
OR
を返す。この計算は 64
ビット(BIGINT
)の精度で実行される。
マッチするレコードがない場合、この関数は 0 を返す。
BIT_XOR(expr)
expr
のすべてのビットに対するビットごとの
XOR
を返す。この計算は 64
ビット(BIGINT
)の精度で実行される。
マッチするレコードがない場合、この関数は 0 を返す。
この関数は MySQL 4.1.1 以降で使用できる。
COUNT(expr)
SELECT
ステートメントで取り出されたレコードのうち、NULL
以外の値の数のカウントを返す。
mysql>SELECT student.student_name,COUNT(*)
->FROM student,course
->WHERE student.student_id=course.student_id
->GROUP BY student_name;
COUNT(*)
は、レコードに
NULL
値が含まれているかどうかにかかわらず、取り出されたレコード数のカウントを返すという点で多少異なる。
SELECT
で 1
つのテーブルから値を取り出し、他のカラムからは値を取り出さず、かつ
WHERE
節がない場合、COUNT(*)
は迅速に戻るよう最適化される。次に例を示す。
mysql> SELECT COUNT(*) FROM student;
この最適化は、MyISAM
テーブルと ISAM
テーブルにのみ適用される。これは、この
2
つのテーブル型では正確なレコードカウントが格納され、迅速にアクセスできるためである。トランザクションストレージエンジン(InnodB
,
BDB
)の場合、複数のトランザクションが発生し、それぞれがカウントに影響する場合があるため、正確なレコードカウントの格納はより難しくなる。
COUNT(DISTINCT expr,[expr...])
NULL
以外の異なる各値の数のカウントを返す。
mysql> SELECT COUNT(DISTINCT results) FROM student;
MySQL
では、式のリストを指定することによって、NULL
を含まない、重複のない式の組み合せの数を得ることができる。
SQL-99 では、COUNT(DISTINCT ...)
内ですべての式を連結する必要がある。
GROUP_CONCAT(expr)
完全な構文
GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col ...]] [SEPARATOR str_val])
この関数は MySQL バージョン 4.1 で追加された。 この関数はグループ内の値を連結した結果の文字列を返す。
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
をオプション設定ファイルに記述することで設定できる。
設定を SQL
クエリで行う構文は次のとおり。
SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
最大長が設定されている場合、結果はこの最大長に合わせて切り捨てられる。
GROUP_CONCAT()
関数は、Sybase SQL
Anywhere でサポートされている基本の
LIST()
関数を拡張した実装である。 カラムが 1
つだけで、その他のオプションが指定されていない場合、GROUP_CONCAT()
は機能がかなり制限されている
LIST()
と下位互換になる。ただし、LIST()
にはデフォルトのソート順序はある。
MIN(expr)
,
MAX(expr)
expr
の最小値または最大値を返す。MIN()
と MAX()
は文字列引数を取ることができる。その場合、最小または最大の文字列値を返す。
See 項5.4.3. 「MySQL でのインデックスの使用」。
mysql>SELECT student_name, MIN(test_score), MAX(test_score)
->FROM student
->GROUP BY student_name;
MySQL
では、現在のところ、MIN()
と
MAX()
やその他の集約関数において
ENUM
型と SET
型のカラムの比較を、セット内での文字列の相対的な位置ではなくそれぞれの文字列値に基づいて行っている。
これは改正される予定。
STD(expr)
,
STDDEV(expr)
expr
の標準偏差(VARIANCE()
の平方根)を返す。これは SQL-99
に対する拡張。この関数の
STDDEV()
の形式は Oracle
との互換性を確保するために提供されている。
SUM(expr)
expr
の合計を返す。注意:
戻り値のセットにレコードが含まれていない場合、NULL
を返す。
VARIANCE(expr)
expr
の標準偏差を返す(レコードはサンプルではなく、母集団全体とみなされる。そのため、この関数はレコード数を分母として取る)。これは
SQL-99 に対する拡張(バージョン 4.1
以降で使用可能)。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.