MySQL - Cláusula GROUP BY

Puedes usar GROUP BYpara agrupar valores de una columna y, si lo desea, realizar cálculos en esa columna. Puede utilizar las funciones COUNT, SUM, AVG, etc. en la columna agrupada.

Comprender GROUP BY cláusula, considere una employee_tbl tabla, que tiene los siguientes registros:

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)

Ahora, suponga que según la tabla anterior queremos contar el número de días que trabajó cada empleado.

Si escribimos una consulta SQL de la siguiente manera, obtendremos el siguiente resultado:

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

Pero esto no sirve a nuestro propósito, queremos mostrar el número total de páginas escritas por cada persona por separado. Esto se hace mediante el uso de funciones agregadas junto con unGROUP BY cláusula de la siguiente manera:

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)

Veremos más funcionalidades relacionadas con GROUP BY en otras funciones como SUM, AVG, etc.

mysql-funciones-útiles.htm