MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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でない行のみをカウントします。

  1. MySQLでFROM句なしのSELECTを使う方法

    FROM句を省略したSELECT文とは?通常、SELECT文におけるFROM句は、データを取得する対象となるテーブルへの参照を示します。しかし、参照すべきテーブルが存在しないケースでは、FROM句を省略してSELECT文を実行することが可能です。言い換えると、SELECTは「テーブルを一切参照せずに計算された行」を取得するためにも利用できるのです。これは、関数の実行結果やユーザー定義変数の値を手軽に確認したい場合などに非常に便利です。例1:文字列関数の実行結果を取得する次の例では、CONCAT_WS()関数を使って文字列を連結しています。FROM句がないにもかかわらず、問題なく結果を返します。

  2. 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