MySQLのSELECT句でグループ関数(集計関数)を使う方法
MySQLにおけるグループ関数(集計関数)は、複数の値の集合に対して処理を行う関数です。そのため、SELECT句内でグループ関数を使用すると、クエリの選択条件に一致する行に対して関数が適用され、その結果がクエリの出力として返されます。
SELECT句でのグループ関数の動作
代表的なグループ関数には、以下のようなものがあります。
- COUNT():行数またはNULL以外の値の数を返す
- MIN():指定した列の最小値を返す
- MAX():指定した列の最大値を返す
- AVG():指定した列の平均値を返す
- SUM():指定した列の合計値を返す
これらの関数はGROUP BY句と組み合わせて使われることも多いですが、GROUP BYを使わずにSELECT句だけで使用することも可能です。その場合、テーブル全体(WHERE句で絞り込まれた全行)が1つのグループとして扱われます。
実行例
以下の例では、「Student」テーブルの各フィールドに対して複数のグループ関数をSELECT文で使用しています。このステートメントの出力は、各グループ関数の結果そのものになります。
mysql> Select COUNT(Name), MIN(Id), AVG(Id), MAX(Id), COUNT(*) from Student; +-------------+---------+---------+---------+----------+ | COUNT(Name) | MIN(Id) | AVG(Id) | MAX(Id) | COUNT(*) | +-------------+---------+---------+---------+----------+ | 5 | 1 | 11.0000 | 20 | 5 | +-------------+---------+---------+---------+----------+ 1 row in set (0.03 sec)
出力結果の解説
- COUNT(Name):Name列の値がNULLではない行は5件であることを示しています。
- MIN(Id):Id列の最小値は「1」です。
- AVG(Id):Id列の平均値は「11.0000」です。
- MAX(Id):Id列の最大値は「20」です。
- COUNT(*):NULLの有無に関係なく、テーブル内の全行数は5件です。
このように、SELECT句でグループ関数を使えば、テーブル全体を対象とした統計情報を1つのクエリで簡単に取得できます。なお、COUNT(*)とCOUNT(列名)の違いに注意してください。COUNT(*)はNULLを含むすべての行をカウントしますが、COUNT(列名)はその列がNULLでない行のみをカウントします。
-
MySQLでFROM句なしのSELECTを使う方法
FROM句を省略したSELECT文とは?通常、SELECT文におけるFROM句は、データを取得する対象となるテーブルへの参照を示します。しかし、参照すべきテーブルが存在しないケースでは、FROM句を省略してSELECT文を実行することが可能です。言い換えると、SELECTは「テーブルを一切参照せずに計算された行」を取得するためにも利用できるのです。これは、関数の実行結果やユーザー定義変数の値を手軽に確認したい場合などに非常に便利です。例1:文字列関数の実行結果を取得する次の例では、CONCAT_WS()関数を使って文字列を連結しています。FROM句がないにもかかわらず、問題なく結果を返します。
-
MySQLでIN句に指定した順序どおりに行を取得する方法:FIND_IN_SET()の活用
IN句の順序で行を取得するには?MySQLでは、IN句に指定した値の順序どおりに結果セットを取得したい場合、通常のクエリでは実現できません。そこで活躍するのが FIND_IN_SET() 関数です。この関数を ORDER BY 句と組み合わせることで、IN句で指定した値の並び順そのままに行をソートできます。基本構文SELECT yourVariableName.* FROM yourTableName yourVariableName WHERE yourVariableName.yourColumnName IN(value1,value2,...N) ORDER BY FIND_IN_SE