SQL GROUP BYSentencias


La sentencia GROUP BY se puede usar junto con algunas funciones de agregación.


Sentencia GROUP BY

La sentencia GROUP BY se utiliza junto con funciones de agregación para agrupar el conjunto de resultados según una o más columnas.

Sintaxis de SQL GROUP BY

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;


Base de datos de demostración

En este tutorial, usaremos la base de datos de muestra EJEMPLO.

A continuación se muestran los datos seleccionados de la tabla "Websites":

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | Ejemplo      | http://www.example.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

A continuación se muestran los datos de la tabla de registros de acceso al sitio web "access_log":

mysql> SELECT * FROM access_log;
+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set (0.00 sec)


Aplicación simple de GROUP BY

Cuente el número de visitas de cada site_id en access_log:

Ejemplo

SELECT site_id, SUM(access_log.count) AS nums
FROM access_log GROUP BY site_id;

Al ejecutar el SQL anterior, el resultado es el siguiente:



SQL GROUP BY con combinación de varias tablas

La siguiente sentencia SQL cuenta el número de registros de los sitios web que tienen registros:

Ejemplo

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

Al ejecutar el SQL anterior, el resultado es el siguiente:

Otras extensiones