minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

GROUP BY節使用時に利用できる関数を紹介します。

AVG

平均値を返します。

SELECT name, AVG(age) FROM person GROUP BY name;

BIT_AND

BIT_OR

BIT_XOR

ビット演算によるAND(OR,XOR)を返します。

SELECT name, BIT_AND(flag) FROM person GROUP BY name;

COUNT

グループ化されたレコードの件数を返します。

SELECT COUNT(*) FROM person;
SELECT COUNT(phone) FROM person;

前者はpersonテーブルに存在する全レコード件数、
後者はそのうちphoneカラムが非NULLの全レコード件数を返します。

COUNT (DISTINCT)

グループ化されたレコードのうち、同一カラムの重複を除いた件数を返します。

SELECT COUNT(DISTINCT country, city) FROM person;

上の例では、countryとcityが重複しないpersonの数を返します。
どちらかのカラムがNULLのレコードはカウントされません。

GROUP_CONCAT

バージョン4.1以降。
詳細は不明です。

MIN

MAX

最大(最小)値を返します。

SELECT MIN(age) FROM person;

STD

STDDEV

標準偏差値を返します。

SELECT STD(score) FROM person;

SUM

合計値を返します。

SELECT SUM(score) FROM person;

VARIANCE

バージョン4.1以降。
標準偏差値(STDの2乗)を返します。

SELECT VARIANCE(score) FROM person;

WITH ROLLUP

バージョン4.1.1以降。
詳細は不明です。

GROUP BY節にないフィールドの使用

標準SQLではGROUP BY句に無いnameカラムを
SELECT式に利用することは出来ません。
MySQLではこの構文を拡張しています。

SELECT name, MAX(score) FROM table_a GROUP BY score;

上の例の場合、scoreが最大であるレコードのnameを取得することが出来ます。