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.