miércoles, 18 de mayo de 2016

Funciones de Agregación y Agrupación en MySQL (Maria DB) Parte I - Función COUNT()

Buenas tardes queridos lectores, el día de hoy les escribiré acerca de las funciones de agregación y agrupación.

Funciones de Agregación


Las funciones de agregación nos permites realizar algunas operaciones sobre un conjunto de datos, generalmente se utilizarán en conjunto con la agrupación para potencializar su rendimiento.

Las funciones de agrupación mas comunes son las siguientes:

  • COUNT(): Devuelve el número de filas seleccionadas por la consulta
  • MIN(): Devuelve el valor mínimo del campo que seleccionemos.
  • MAX(): Devuelve el valor máximo del campo que seleccionemos.
  • SUM(): Suma los valores del campo que le especifiquemos. NOTA: Solo se pueden utilizar campos de tipo numérico
  • AVG(): Acrónimo de AVERGANGE, devuelve el promedio del campo que especifiquemos. NOTA: Solo se puede utilizar con campos de tipo numérico
En este post trataremos como su titulo lo indica, sobre la función COUNT()


Funciones de Agrupación

Las funciones de Agrupación nos permiten agrupar filas, según los campos específicados, es común que se utilicen en conjunto con las funciones de agregación para obtener resultados resumidos y agrupados, como lo es la clausula GROUP BY.

Pero como siempre, pongámonos manos a la obra y comencemos a hacer lo que nos gusta, aprender mientras hacemos, para eso les mostraré un ejemplo:


Ejercicio 1:

Mostrar la cantidad de equipos participantes en el torneo de “Clausura MX 2016”, utilizando la función COUNT(),

Tabla EquiposTorneos


select idtorneo as Torneo, count(idequipo) as Equipos_torneos
from equipostorneos
where idtorneo = 11;


Al ejecutar la consulta nos devuelve los siguientes datos:





Como pueden ver la tabla que usaremos es la de EQUIPOSTORNEOS que es la tabla que contiene los equipos participantes por torneo, si hacemos un SELECT a la tabla de torneos nos daremos cuenta que el idtorneo del torneo "Clausura MX 2016" es el 11, de ahi que la clausula WHERE hace referencia a ese idtorneo. 


count(idequipo) as Equipos_torneos
from equipostorneos

En esta instrucción le indicamos al programa que va a contar los registros que encuentre en el campo idequipo, en este caso encontró 18, que son los equipos participantes, los invito a que ejecuten esa instrucción sin el COUNT() para que vean lo que sucede, esa consulta podemos mejorarla fácilmente de la siguiente manera:

Ejercicio 2:

Mostrar los equipos participantes del torneo “Clausura MX 2016” y el de “Ascenso MX Clausura 2016” utilizando la función agregada COUNT() y la agrupación GROUP BY

select t.nombre as Torneo, count(et.idequipo) as Equipos_torneos
from equipostorneos et
INNER JOIN torneos t
ON t.idTorneo = et.idtorneo
and et.idtorneo in (11,12)
group by et.idtorneo


Como pueden observar y analizar de la consulta, estamos utilizando un INNER JOIN para traer el nombre del torneo, despues estamos contando los registros que encuentre en el campo idtorneo de la tabla EQUIPOSTORNEOS, utilizamos la sentencia IN para indiar que queremos que nos muestre el idtorneo 11 y 12, y posteriormente agrupamos mediante la clausula GROUP BY el campo idtorneo. Pero, ¿que pasa si no lo agrupamos??. Vemos, ejecutemos la consulta sin e GROUP BY, como sigue:

select t.nombre as Torneo, count(et.idequipo) as Equipos_torneos
from equipostorneos et
INNER JOIN torneos t
ON t.idTorneo = et.idtorneo
and et.idtorneo in (11,12)


Interesante, ¿no?, nos suma los 18 equipos del Clausura MX 2016, y además los 16 equipos del Ascenso MX 2016, pero ¿porque? Es fácil, le decimos que cuente los registros que encuentre que se tenga el id 11 y el id 12, la base de datos los cuenta y nos obtiene el 34, pero solo nos muestra el nombre del Clausura 2016, esto es porque no estamos agrupando, sino que lo estamos dejando todo en un solo registro, al momento de agrupar, entonces separa según el criterio que le dimos, en el anterior caso idtorneo. Pero veamos un tercer ejemplo

Ejercicio 3:

Contar el número de partidos jugados en el torneo Clausura MX 2016 y en el Ascenso MX 2016 utilizando la función de agregado COUNT()

select t.nombre,count(p.idpartido) as CUENTA
from partidos as p
INNER JOIN TORNEOS T
ON p.idTorneo = t.idtorneo
where t.idtorneo in (11,12, 13)
group by t.idtorneo

La siguiente consulta muestra el siguiente resultado:


¿Creen poder analizar la consulta?. Espero sus comentarios y dudas, quiero agradecer a las personas que han estado compartiendo, he recibido muchas visitas al blog y eso me motiva a seguir escribiendo, muchas gracias a todos, espero sigan compartido, den un +1, comenten o den clic a algún anuncio de los que vienen aquí de Adsense, cualquier cosa, comentario o duda que tengan no vacilen en pregutar, estoy a sus ordenes.

Saludos







Banderas de Visitantes

Flag Counter