Agrupar por varias columnas en MySQL

Preet Sanghavi 30 enero 2023
  1. La declaración Group By en MySQL
  2. La declaración GROUP BY en MySQL con múltiples columnas
Agrupar por varias columnas en MySQL

En este tutorial, nuestro objetivo es comprender cómo usar el comando GROUP BY con dos o más columnas.

El comando de MySQL GROUP BY es una técnica mediante la cual podemos agrupar registros con valores idénticos en función de criterios particulares definidos con el propósito de agrupar. Cuando tratamos de agrupar datos considerando una sola columna, todos los registros que poseen los mismos valores en los que se definen los criterios se acoplan en una única salida.

Sin embargo, MySQL permite a los usuarios agrupar datos no solo con una columna singular para su consideración, sino también con varias columnas. Exploraremos esta técnica en la última sección de este tutorial. Para resumir, cuando intentamos agrupar considerando varias columnas, podemos obtener un resultado en el que la agrupación de valores de columna se realiza en relación con más de una columna junto con un criterio de agrupación.

Si bien este concepto puede parecer difícil de implementar, comencemos considerando una columna en nuestra declaración GROUP BY.

Sin embargo, antes de comenzar, creamos un conjunto de datos ficticio para trabajar. Aquí creamos una tabla, student_details, junto con algunas filas en ella.

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_grade int,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_grade,stu_lastName) 
 VALUES(1,"Preet",40,"Sanghavi"),
 (2,"Rich",50,"John"),
 (3,"Veron",60,"Brow"),
 (4,"Geo",70,"Jos"),
 (5,"Hash",80,"Shah"),
 (6,"Sachin",90,"Parker"),
 (7,"David",25,"Miller"),
 (8,"Richa",50,"Joh"),
 (9,"Verona",60,"Brow"),
 (10,"Geoa",70,"Josh"),
 (11,"Hasha",80,"Ash"),
 (12,"Allen",90,"Parker");

La consulta anterior crea una tabla junto con filas con el nombre y apellido del estudiante. Para ver las entradas en los datos, usamos el siguiente código:

SELECT * FROM student_details;

El código anterior daría el siguiente resultado:

stu_id	stu_firstName	stu_grade	stu_lastName
1			Preet			40			Sanghavi
2			Rich			50			John
3			Veron			60			Brow
4			Geo				70			Jos
5			Hash			80			Shah
6			Sachin			90			Parker
7			David			25			Miller
8			Richa			50			Joh
9			Verona			60			Brow
10			Geoa			70			Josh
11			Hasha			80			Ash
12			Allen			90			Parker

Ahora, intentemos entender el uso de una declaración simple GROUP BY para agrupar stu_lastName con la suma de stu_grade como cláusula agregada.

La declaración Group By en MySQL

Como sabemos, la declaración GROUP BY nos ayuda a agrupar registros que poseen los mismos valores para los criterios definidos. La sintaxis básica de la instrucción GROUP BY es la siguiente:

SELECT col_a, col_b, aggregate_function(col_c)
FROM tab_name
WHERE condition GROUP BY criteria_col_1;

Podemos encontrar la suma de las puntuaciones de los estudiantes con el mismo apellido de la siguiente manera:

SELECT SUM(stu_grade), stu_lastName FROM student_details
GROUP BY stu_lastName;

El código mencionado anteriormente da el siguiente resultado:

SUM(stu_grade)	stu_lastName
40				Sanghavi
50				John
120				Brow
70				Jos
80				Shah
180				Parker
25				Miller
50				Joh
70				Josh
80				Ash

La declaración GROUP BY en MySQL con múltiples columnas

Como se vio anteriormente, MySQL proporciona la funcionalidad de agrupar registros según un criterio. Otra adición a este método es que podemos agrupar más de una columna de la tabla a la vez. La sintaxis para agrupar más de una columna en MySQL se puede escribir de la siguiente manera:

SELECT col_a, col_b, aggregate_function(col_c)
FROM tab_name
WHERE condition GROUP BY criteria_col_1, criteria_col_2, criteria_col_3;

Como podemos ver arriba, criterio_col_1, criterio_col_2 y criterio_col_3 son las tres columnas incluidas en la cláusula GROUP BY.

Ahora intentemos agrupar los nombres y apellidos de los estudiantes en función de la suma de sus calificaciones como función agregada. Podemos realizar esta operación con el siguiente código:

SELECT SUM(stu_grade), stu_lastName, stu_firstName
FROM student_details
GROUP BY stu_lastName, stu_firstName;

El resultado del código anterior es el siguiente:

SUM(stu_grade)	stu_lastName	stu_firstName
40				Sanghavi		Preet
50				John			Rich
60				Brow			Veron
70				Jos				Geo
80				Shah			Hash
90				Parker			Sachin
25				Miller			David
50	            Joh	            Richa
60				Brow			Verona
70				Josh			Geoa
80				Ash				Hasha
90				Parker			Allen

Como podemos ver, la salida agrupa las columnas stu_firstName y stu_lastName. Del mismo modo, podemos agrupar varias columnas en MySQL. Por lo tanto, la instrucción GROUP BY se puede usar de manera eficiente con una o varias columnas con los métodos mencionados anteriormente.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - MySQL Groupby