Mysql-group-by-clause

提供:Dev Guides
移動先:案内検索

MySQL-GROUP BY句

*GROUP BY* を使用して列の値をグループ化し、必要に応じてその列で計算を実行できます。 グループ化された列でCOUNT、SUM、AVGなどの関数を使用できます。
*GROUP BY* 句を理解するために、次のレコードを持っている *employee_tbl* テーブルを考慮してください-
mysql> SELECT * FROM employee_tbl;
+------+------+------------+--------------------+
|  id  | name | work_date  | daily_typing_pages |
+------+------+------------+--------------------+
|   1  | John | 2007-01-24 |        250         |
|   2  | Ram  | 2007-05-27 |        220         |
|   3  | Jack | 2007-05-06 |        170         |
|   3  | Jack | 2007-04-06 |        100         |
|   4  | Jill | 2007-04-06 |        220         |
|   5  | Zara | 2007-06-06 |        300         |
|   5  | Zara | 2007-02-06 |        350         |
+------+------+------------+--------------------+
7 rows in set (0.00 sec)

ここで、上記の表に基づいて、各従業員が働いた日数をカウントするとします。

私たちは次のようにSQLクエリを記述する場合、私たちは次の結果を取得します-

mysql> SELECT COUNT(*) FROM employee_tbl;
+---------------------------+
|          COUNT(*)         |
+---------------------------+
|             7             |
+---------------------------+

しかし、これは私たちの目的にかなっていません。各人が個別に入力したページの総数を表示したいのです。 これは、次のように GROUP BY 句と組み合わせて集計関数を使用することにより行われます-

mysql> SELECT name, COUNT(*)
   -> FROM   employee_tbl
   -> GROUP BY name;
+------+----------+
| name | COUNT(*) |
+------+----------+
| Jack |     2    |
| Jill |     1    |
| John |     1    |
| Ram  |     1    |
| Zara |     2    |
+------+----------+
5 rows in set (0.04 sec)

SUM、AVGなどの他の関数では、GROUP BYに関連するより多くの機能が表示されます。