SQL Server - Agrupando datos

SQL SERVER - AGRUPANDO DATOS
Introducción
Muchas veces tenemos la necesidad de presentar reportes con datos estadísticos simples, como por ejemplo con respecto al resultado de una evaluación:
  • Cuantos alumnos tomaron la evaluación
  • La nota mayor.
  • La nota menor.
  • La nota promedio.
  • La cantidad de aprobados
Estos cálculos se pueden ampliar a todas las evaluaciones de un curso, o tal vez aplicarlos a todas las evaluaciones de todos los cursos.
También se puede aplicar a otros campos, por ejemplo una tienda por departamentos podría necesitar información estadística sobre las preferencias de sus clientes para aplicar un marketing personalizado, el área de compras necesita cierta información para poder negociar con los proveedores, y así podemos encontrar muchos casos en los que se necesita información estadística para tomar mejores decisiones.
Para obtener esta información directamente de la base de datos debemos aplicar funciones agregadas y agrupamiento de datos en la sentencia SELECT.
Tabla de Muestra
Para los ejemplos utilizaremos la siguiente tabla:
TABLA: NOTAS
Curso Alumno Practica Nota
Java Pedro P1 16
Java Karla P1 12
Java Doris P1 13
Oracle Manuel P1 15
Oracle Pedro P1 18
Oracle Karla P1 10
Oracle Doris P1 13
Java Manuel P2 14
Java Pedro P2 17
Java Karla P2 15
Java Doris P2 16
Funciones Agregadas
Las funciones agregadas permiten realizar cálculos estadístico, se aplican sobre las columnas de una tabla o expresiones a través de todas las filas de una tabla.
Las más utilizadas son:
  • COUNT: Contar filas o valores no nulos.
  • MAX: Obtener el valor máximo de una columna.
  • MIN: Obtener el valor mínimo de una columna.
  • SUM: Obtener la suma de los valores de una columna, no considera los nulos.
  • AVG: Obtener el promedio de los valores de una columna, no considera los nulos
Ejemplo 1
Cuantos alumnos han rendido la práctica 1 de Java.
select COUNT(Alumno) Alumnos
from dbo.NOTAS
where Curso = 'Java' and Practica = 'P1';
GO
El resultado es el siguiente:
Alumnos
-----------
3
Ejemplo 2
Cuantos alumnos han aprobado la práctica 1 de Oracle.
select COUNT(Alumno) Alumnos
from dbo.NOTAS
where Curso = 'Oracle'
and Practica = 'P1'
and nota >= 12;
GO
El resultado es el siguiente:
Alumnos
-----------
3
GROUP BY
La cláusula GROUP BY permite agrupar datos y obtener datos estadísticos de cada grupo.
Cada grupo se resume en una sola fila.
Ejemplo 3
Obtener la cantidad de alumnos de cada curso.
select Curso, COUNT(distinct Alumno) Alumnos
from dbo.NOTAS
group by Curso;
GO
La cláusula DISTINCT se utiliza para que no cuente los valores duplicados. El resultado es el siguiente:
Curso           Alumnos
--------------- -----------
Java            4
Oracle          4
Ejemplo 4
Cuántos alumnos han rendido cada práctica por cada uno de los cursos.
select Curso, Practica, COUNT(Alumno) Alumnos
from dbo.NOTAS
group by Curso, Practica
order by 1, 2;
GO
La cláusula ORDER BY se utiliza para ordenar el resultado, en este se está ordenando por las dos primeras columnas. El resultado es el siguiente:
Curso           Practica Alumnos
--------------- -------- -----------
Java            P1       3
Java            P2       4
Oracle          P1       4
HAVING
La cláusula HAVING se utiliza para hacer filtro de grupos, por ejemplo, se necesita saber quiénes son los alumnos con promedio mayor o igual a 18, o tal vez, se necesita saber el cliente que más consume con tarjeta VISA.
Ejemplo 5
Que alumnos han rendido solo dos prácticas.
select Alumno, COUNT(Practica) Practicas
from dbo.NOTAS
group by Alumno
having COUNT(Practica) = 2;
GO
Las funciones que se utilicen en la cláusula SELECT son las que debemos utilizar en la cláusula HAVING. El resultado es el siguiente:
Alumno          Practicas
--------------- -----------
Manuel          2
Video
A continuación tienes un video tutorial donde te explico todos estos temas.
CÓDIGO FUENTE
En esta sección te presento un video de una aplicación CLIENTE-SERVIDOR.
Tú tienes acceso al código fuente de esta aplicación, después del video tienes el enlace.



No hay comentarios:

Publicar un comentario