SELECT
ca_nombre,
cantidad=COUNT(*)
FROM
Carreras c,
MateriasXCarreras m
WHERE
c.ca_id = m.ca_id
GROUP BY
ca_nombre
Listar cantidad de materias por carrera distinguiendo por año de cursado y por cuatrimestre
SELECT
ca_nombre,
mc_año,
mc_cuat
cantidad=COUNT(*)
FROM
Carreras c,
MateriasXCarreras m
WHERE
c.ca_id = m.ca_id
GROUP BY
ca_nombre,
mc_año,
mc_cuat
El siguiente material es tomado textualmente de Books On Line de Microsoft SQL Server
Cuando se usan sin una cláusula GROUP BY, las funciones de agregado sólo devuelven un valor de agregado para la instrucción SELECT. La cláusula GROUP BY se usa para producir valores de agregado para cada fila del conjunto de resultados.
En este ejemplo se devuelve el número de unidades vendidas de cada producto de la categoría 2:
SELECT OrdD.ProductID AS ProdID,SUM(OrdD.Quantity) AS AmountSoldFROM [Order Details] AS OrdD , Products as PrdWHERE OrdD.ProductID = Prd.ProductIDAND Prd.CategoryID = 2GROUP BY OrdD.ProductIDÉste es el conjunto de resultados:
ProdID AmountSold ------ ----------- 3........ 328 4........ 453 5........ 298 6........ 301 8........ 372 15....... 122 44....... 601 61....... 603 63....... 445 65....... 745 66....... 239 77....... 791 (12 row(s) affected)
A continuación de las palabras clave GROUP BY se coloca una lista de columnas, conocidas como las columnas de agrupamiento. La cláusula GROUP BY restringe las filas del conjunto de resultados y sólo hay una fila por cada valor distinto de las columnas o columna de agrupamiento. Cada fila del conjunto de resultados contiene los datos de resumen relacionados con el valor específico de sus columnas de agrupamiento.
Hay restricciones en los elementos que se pueden especificar en la lista de selección cuando una instrucción SELECT contiene una cláusula GROUP BY. Los únicos elementos permitidos en la lista de selección son:
- Las columnas de agrupamiento.
- Expresiones que devuelven un solo valor por cada valor de las columnas de agrupamiento, como, por ejemplo, las funciones de agregado que tienen un nombre de columna como uno de sus parámetros. Se conocen como agregados vectoriales.
Por ejemplo, TableX contiene:
ColumnA | ColumnB | ColumnC |
------- | ------- | ------- |
1 | abc | 5 |
1 | def | 4 |
1 | ghi | 9 |
2 | jkl | 8 |
2 | mno | 3 |
Si ColumnA se usa como la columna de agrupamiento, habrá dos filas en el conjunto de resultados, una que resuma la información del valor 1 y la otra que resuma la información del valor 2.
Cuando la ColumnA es la columna de agrupamiento, la única forma en la que se podría hacer referencia a la ColumnB o ColumnC es en el caso de que fueran parámetros de una función de agregado que pudiera devolver un valor único por cada valor de ColumnA. La lista de selección puede incluir expresiones como, por ejemplo, MAX(ColumnB), SUM(ColumnC) o AVG(ColumnC):
SELECT ColumnA,MAX(ColumnB) AS MaxB,SUM(ColumnC) AS SumCFROM TableXGROUP BY ColumnA Esta selección devuelve dos filas, una por cada valor exclusivo de ColumnA:
ColumnA MaxB SumC ------- ---- ----- 1....... ghi 18 2....... mno 11 (2 row(s) affected)
Sin embargo, no se permite tener sólo la expresión ColumnB en la lista de selección:
SELECT ColumnA,ColumnB,SUM(ColumnC) AS SumCFROM TableXGROUP BY ColumnA Puesto que GROUP BY sólo puede devolver una fila con el valor 1 en ColumnA, no hay forma de devolver los tres valores de ColumnB (abc, def y ghi) asociados con el valor 1 de ColumnA.
No hay comentarios.:
Publicar un comentario