Usar group by en varias columnas

1037

Entiendo el punto de GROUP BY x

Pero, ¿cómo GROUP BY x, yfunciona y qué significa?

l --''''''--------- '' '' '' '' '' ''
fuente
2
No lo encontrará descrito ya que esta pregunta lo plantea. La cláusula GROUP BY puede tomar uno o más campos. GRUPO POR CLIENTE; GROUP BY apellido, nombre; GRUPO POR año, tienda, sku etc.
Bill

Respuestas:

2029

Group By Xsignifica poner a todos aquellos con el mismo valor para X en un grupo .

Group By X, Ysignifica poner a todos aquellos con los mismos valores para X e Y en un grupo .

Para ilustrar el uso de un ejemplo, digamos que tenemos la siguiente tabla, que tiene que ver con quién asiste a qué materia en una universidad:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

Cuando usa un solo group byen la columna de asunto; decir:

select Subject, Count(*)
from Subject_Selection
group by Subject

Obtendrás algo como:

Subject    Count
------------------------------
ITB001     5
MKB114     2

... porque hay 5 entradas para ITB001 y 2 para MKB114

Si fuéramos a group bydos columnas:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

obtendríamos esto:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

Esto se debe a que, cuando agrupamos por dos columnas, está diciendo "Agrúpelos para que todos aquellos con el mismo Asunto y Semestre estén en el mismo grupo, y luego calcule todas las funciones agregadas (Cuenta, Suma, Promedio, etc.) ) para cada uno de esos grupos " . En este ejemplo, esto se demuestra por el hecho de que, cuando los contamos, hay tres personas que hacen ITB001 en el semestre 1, y dos que lo hacen en el semestre 2. Ambas personas que hacen MKB114 están en el semestre 1, por lo que no hay fila del semestre 2 (no hay datos en el grupo "MKB114, semestre 2")

Esperemos que tenga sentido.

Smashery
fuente
11
@Smashery: ¿Entonces esto también significa que GROUP BY A,Bes lo mismo que GROUP BY B,A?
tumchaaditya
23
Si lo hace. No puedo decir con certeza si son tan eficientes como los demás, pero darán el mismo resultado, sí.
Smashery
2
Se debe agregar aquí que hay una diferencia entre GROUP BY a, by GROUP BY a AND bdado que el segundo solo enumera los elementos agrupados con exactamente el mismo contenido y sin "subgrupos". En este caso, la salida sería la misma que la primera.
Dwza
55
Me gustaría agregar que no importa el orden en que se agrupan las columnas. En el grupo de ejemplo anterior por semestre, el sujeto habría dado el mismo resultado
user2441441
2
bueno, agrupar por a, b y agrupar por b, a NO devuelve el mismo resultado - las filas se muestran en un orden diferente
fanny
33

La GROUP BYcláusula se usa junto con las funciones agregadas para agrupar el conjunto de resultados por una o más columnas. p.ej:

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

Recuerda esta orden:

1) SELECCIONAR (se utiliza para seleccionar datos de una base de datos)

2) FROM (la cláusula se usa para enumerar las tablas)

3) DONDE (la cláusula se usa para filtrar registros)

4) GROUP BY (la cláusula se puede usar en una instrucción SELECT para recopilar datos en varios registros y agrupar los resultados en una o más columnas)

5) HAVING (la cláusula se usa en combinación con la cláusula GROUP BY para restringir los grupos de filas devueltas solo a aquellos cuya condición es VERDADERA)

6) ORDER BY (la palabra clave se usa para ordenar el conjunto de resultados)

Puede usar todo esto si está utilizando funciones agregadas, y este es el orden en que deben establecerse; de ​​lo contrario, puede obtener un error.

Las funciones agregadas son:

MIN devuelve el valor más pequeño en una columna dada

SUM devuelve la suma de los valores numéricos en una columna dada

AVG devuelve el valor promedio de una columna dada

COUNT devuelve el número total de valores en una columna dada

COUNT (*) devuelve el número de filas en una tabla

S. Mayol
fuente
1
pero dónde ponemos las 2 columnas, la pregunta es cómo agregar en base a 2 / más columnas
Chaitanya Bapat
Hola Chaitanya, no sé si esto es lo que estás preguntando, pero déjame darte algunos ejemplos. Si tiene una tabla de productos, utiliza funciones agregadas de esta manera, a continuación se presentan dos escenarios: SELECCIONE AVG (instock) DE productos; Esto calculará las unidades promedio en stock de la tabla de productos. Ahora desea calcular las unidades en stock por categoría de producto, tiene que usar la función AVG con la cláusula GROUP BY de esta manera: SELECCIONE IdCategoría, AVG (instock) DESDE productos GRUPO POR categoríaId;
S. Mayol
Esto ni siquiera responde remotamente la pregunta ... La pregunta aquí es cómo lograr la "agrupación encadenada" de "sujeto" y "semestre" al mismo tiempo, como se explica en el ejemplo dado ...
MahNas92