---
title: Curso de Bases de Datos con MySql -Parte V- (Video) «Group By»
url: https://jarroba.com/curso-bases-datos-mysql-parte-v-video-group-by/
author: Richard [Admin Jarroba]
date: 2015-11-09
modified: 2026-10-21
language: es
license: CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/) — attribution: "Curso de Bases de Datos con MySql -Parte V- (Video) «Group By»", Richard [Admin Jarroba], jarroba.com
categories: Bases de Datos
tags: group by, MySql
series: Curso de bases de datos con MySQL (part 5 of 5)
---

# Curso de Bases de Datos con MySql -Parte V- (Video) «Group By»

> La sentencia "Group By" tiene como finalidad la de agrupar valores idénticos de una tabla.

#### Este Curso de bases de datos con MySql está formado por las siguientes entradas:

 
1. [Parte I:](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-i-video-instalacion-del-mysql-server-y-workbench/) Instalación del MySql Server y MySql Workbench
2. [Parte II:](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-ii-video/) Creacción de Tablas y Relaciones entre tablas (Modelo Entidad-Relación)
3. [Parte III:](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-iii-video-definitionmanipulation/) Sentencias básicas de MySql (Definition & Manipulation)
4. [Parte IV:](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-iv-video-inner-join/) Sentencia «INNER JOIN» para la unión de Tablas
5. Parte V: Sentencia «GROUP BY» para la agrupación de datos

 

### Parte V: Sentencia «Group By» para la agrupación de datos

 

La sentencia «Group By» tiene como finalidad la de ***agrupar valores idénticos de una tabla***. Al aplicar esta sentencia a una/s columna/s de la tabla origen, tenemos como ***resultado una única fila resumen por cada grupo de elementos únicos formados***. A esta cláusula le podemos aplicar también una serie de ***funciones de agregación*** que nos permiten efectuar operaciones sobre un conjunto de resultados, pero devolviendo un único valor agregado para todos ellos. Alguna de estas funciones de agregación son: ***COUNT(), SUM(), MAX(), MIN(), AVG(), STDEV(), STDEV(), VAR(), VARP()***.

 

 

Veamos paso por paso un ejemplo sencillo para entender lo que hace esta sentencia. En primer lugar nos vamos a crear una base de datos que tendrá una única tabla ‘***coches***‘ en la que vamos a aplicar estas sentencias. A continuación copio el script para la creación de esta base de datos con la tabla coches y una serie de tuplas (si tenéis dudas para hacer esto mirar el video o el tutorial «[Creacción de Tablas y Relaciones entre tablas (Modelo Entidad-Relación)](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-ii-video/)«):

 

```sql

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

DROP SCHEMA IF EXISTS `miprimerabasededatos` ;
CREATE SCHEMA IF NOT EXISTS `miprimerabasededatos` DEFAULT CHARACTER SET utf8 ;
SHOW WARNINGS;
USE `miprimerabasededatos` ;

-- -----------------------------------------------------
-- Table `coches`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `coches` ;

CREATE  TABLE IF NOT EXISTS `coches` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `Marca` VARCHAR(45) NOT NULL ,
  `Modelo` VARCHAR(45) NOT NULL ,
  `kilometros` INT(11) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB
AUTO_INCREMENT = 10
DEFAULT CHARACTER SET = utf8;

SHOW WARNINGS;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (1,'Renault','Clio',10);
INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (2,'Renault','Megane',23000);
INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (3,'Seat','Ibiza',9000);
INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (4,'Seat','Leon',20);
INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (5,'Opel','Corsa',999);
INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (6,'Renault','Clio',34000);
INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (7,'Seat','Ibiza',2000);
INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (8,'Seat','Cordoba',99999);
INSERT INTO `coches` (`id`,`Marca`,`Modelo`,`kilometros`) VALUES (9,'Renault','Clio',88888);
```

 

Una vez creada la tabla, vemos que cada coche está caracterizado por una Marca, un Modelo y tiene una serie de kilometros realizados. Si hiciésemos una agrupación por Marca, tendríamos como resultado todas las Marcas de coche distintas que hay en esta tabla. Veamos nuestra primera query de agrupación y el resultado que obtenemos:

 

```sql

SELECT Marca FROM miprimerabasededatos.coches GROUP BY Marca;
```

 

Con esta query hacemos lo siguiente:

 

[![groupByMarca_jarroba](https://jarroba.com/wp-content/uploads/2015/11/groupByMarca_jarroba.png)](https://jarroba.com/wp-content/uploads/2015/11/groupByMarca_jarroba.png)

 

Vemos que en la tabla tenemos 3 Marcas de coche diferentes y por tanto al agruparlas nos dice cuáles son. De igual forma podemos hacer una agrupación por más campos; por ejemplo, podemos ver cuántos coches distintos hay teniendo en cuenta la Marca y el Modelo:

 

```sql

SELECT Marca, Modelo FROM miprimerabasededatos.coches GROUP BY Marca, Modelo;
```

 

[![ModeloMarca_jarroba](https://jarroba.com/wp-content/uploads/2015/11/ModeloMarca_jarroba.png)](https://jarroba.com/wp-content/uploads/2015/11/ModeloMarca_jarroba.png)

 

Como se ha dicho en la introducción también podemos aplicar funciones matemáticas a las agrupaciones. Veamos la primera y la más intuitiva, que es la de contar el número de coches que hay con Marcas distintas. Esto lo hacemos aplicando la función ‘*COUNT()*‘ de la siguiente manera:

 

```sql

SELECT Marca, COUNT(*) FROM miprimerabasededatos.coches GROUP BY Marca;
```

 

Si hacemos cuentas antes de ver el resultado, vamos a obtener que hay 4 coches de la Marca Renault y Seat, y que por otro lado hay solo un coche de la Marca Opel:

 

[![groupByMarcaCount_jarroba](https://jarroba.com/wp-content/uploads/2015/11/groupByMarcaCount_jarroba.png)](https://jarroba.com/wp-content/uploads/2015/11/groupByMarcaCount_jarroba.png)

 

También podemos aplicar una ordenación, para que nos ordene la operación de mayor a menor. Esto se hace de la siguiente forma:

 

```sql

SELECT Marca, COUNT(*) AS contador FROM miprimerabasededatos.coches GROUP BY Marca ORDER BY contador DESC;
```

 

[![groupbyOrdenado_jarroba](https://jarroba.com/wp-content/uploads/2015/11/groupbyOrdenado_jarroba.png)](https://jarroba.com/wp-content/uploads/2015/11/groupbyOrdenado_jarroba.png)

 

Habiendo hecho ya una operación sencilla con la función ‘COUNT()’, puede resultar más o menos intuitivo aplicar el resto de funciones. Por ejemplo vamos ahora a agrupar por Marca de coche y vamos a hacer la suma de los kilometros que han realizado los coches por Marca. Esto lo hacemos pasándole a la función ‘SUM()’ el nombre de la columna sobre la que ha de aplicar esa operación, que en este caso es la columna ‘kilometros’:

 

```sql

SELECT Marca, SUM(kilometros) FROM miprimerabasededatos.coches GROUP BY Marca;
```

 

[![sumGroupby_jarroba](https://jarroba.com/wp-content/uploads/2015/11/sumGroupby_jarroba.png)](https://jarroba.com/wp-content/uploads/2015/11/sumGroupby_jarroba.png)

 

Podemos obtener también el coche por marca que más kilómetros ha realizado o menos, aplicando las funciones ‘MAX()’ y ‘MIN()’

 

```sql

SELECT Marca, MAX(kilometros) FROM miprimerabasededatos.coches GROUP BY Marca;
SELECT Marca, MIN(kilometros) FROM miprimerabasededatos.coches GROUP BY Marca;
```

 

[![max_min_GroupBy_Jarroba](https://jarroba.com/wp-content/uploads/2015/11/max_min_GroupBy_Jarroba.png)](https://jarroba.com/wp-content/uploads/2015/11/max_min_GroupBy_Jarroba.png)

 

De esta forma podíamos seguir aplicando todas las funciones que se han comentado al principio para las agregaciones.

 

### **CONCLUSIONES:**

 

Este tutorial está destinado a aquellas personas o estudiantes que están empezando a ver consultas en bases de datos. Es un tutorial muy sencillo que tiene como finalidad mostrar la cláusula «GROUP BY» y que esta sea bien entendida para aplicarla posteriormente en queries muchísimo más complejas, ya que los ejemplos puestos aquí son muy sencillos.

## Serie: Curso de bases de datos con MySQL

1. [Curso de Bases de Datos con MySql -Parte I- (Video)](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-i-video-instalacion-del-mysql-server-y-workbench.md)
2. [Curso de Bases de Datos con MySql -Parte II- (Video) -Entidad/Relación-](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-ii-video.md)
3. [Curso de Bases de Datos con MySql -Parte III- (Video) Definition/Manipulation](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-iii-video-definitionmanipulation.md)
4. [Curso de Bases de Datos con MySql -Parte IV- (Video) «INNER JOIN»](https://jarroba.com/curso-de-bases-de-datos-con-mysql-parte-iv-video-inner-join.md)
5. [Curso de Bases de Datos con MySql -Parte V- (Video) «Group By»](https://jarroba.com/curso-bases-datos-mysql-parte-v-video-group-by.md)

