lunes, 30 de mayo de 2016

AVG, ROUND y HAVING en MySQL (Maria DB)

Buenas tardes queridos lectores, el día de hoy hablaremos sobre la función AVG() y la función agrupada HAVING() que se utiliza con el GROUP BY.


AVG()


La función AVG(), el la abreviación de AVERANGE, se utiliza para obtener promedios, el promedio de una celda definida, se puede utilizar al igual que las demás funciones con el GROUP BY, para mejores resultados, pero para más claridad, vamos a poner manos a la obra.


Ejercicio 1:

Obtener el promedio de asistencia por partido, así como la asistencia total de visitantes de la “Clausura MX 2016”, utilizando la función AVG() y la función SUM()

select avg(asistencia), sum(asistencia)
from partidos
where idtorneo = 11



Como pueden observar la función AVG() obtiene el promedio, en este caso el promedio por partido es de 27777 asistentes, si multuplicamos esa cantidad por 9 partidos y luego por 17 jornadas obtendremos 4249927 aficionados que asistieron a los estadios

ROUND()


Esta función nos ayuda a redondear decimales, recibe dos parámetros, el primero es el número a redondear y el siguiente es el número de decimales, vemos un pequeño ejemplo:

select '4.456834' as numero, round(4.456834,2) as redondeo


Como ven, el primer campo es un número sin redondear, y el segundo es ese mismo número, pero redondeado a dos decimales, vamos a ver ese mismo ejemplo, pero ahora redondeando a número entero, es decir 0 decimales, la consulta quedaría de la siguiente manera:

select '4.456834' as numero, round(4.456834,0) as redondeo


Como ven, al redondear con 0 decimales, nos trunca la parte decimal de la cantidad, en este caso redondeo hacia abajo, pero dependiendo el valor redondeará hacia abajo o hacia arriba, pero volvamos al ejemplo del AVG():

select round(avg(asistencia),0), sum(asistencia)
from partidos
where idtorneo = 11


Como ven, aquí es la misma consulta, pero agregándole la función ROUND(), ahora hagamos más ejercicios de promedio y agrupamiento:

Ejercicio 2:

Obtener el promedio y el total de asistencia por jornada del torneo “Clausura MX 2016”, utilizando la función AVG(), SUM()  y el agrupamiento GROUP BY

select jornada, round(avg(asistencia),0) as Promedio_Partido, sum(asistencia) as AsistenciaTotal
from partidos
where idtorneo = 11
group by jornada

Al ejecutar la consulta nos devolverá el siguiente resultado:


Como ven, el primer campo nos muestra el promedio por jornada, y el segundo la asistencia total por jornada, si multiplicamos el promedio por 9 partidos, verán que el resultado es correcto, pero ya que estamos finalizando las funciones agregadas, hablaremos de una clausula muy importante: la clausula HAVING

HAVING

La clausula HAVING es muy similar a la clausula WHERE, a diferencia de ella, la clausula HAVING actúa sobre los registros agrupados y la clausula WHERE actúa sobre un registro en particular.

Ejercicio 3

Obtener el promedio y asistencia por jornada, partiendo de que la media es de 27 mil aficionados, queremos únicamente mostrar aquellas jornadas que tuvo asistencia por arriba del promedio, utilizando las funciones AVG() y SUM() así como la agrupación GROUP BY y HAVING

select jornada, round(avg(asistencia),0) as Promedio_Partido, sum(asistencia) as AsistenciaTotal
from partidos
where idtorneo = 11
group by jornada
having avg(asistencia) >= 28000


Como ven, la clausula HAVING nos muestrá únicamente los registros que tienes asistencia, mayor o igual a 28 mil, de esta manera sabemos que en 7 jornadas, la asistencia estuvo por encima de la media, esto no se puede hacer con la clausula WHERE debido a que ella actúa sobre los registros individuales, y la clausula HAVING actúa sobre los registros agrupados.

Espero que este post haya sido de su utilidad queridos lectores, de cualquier manera si tienen alguna duda pueden escribir y preguntar, estos a sus ordenes, espero comenten, compartan, den +1 o un clic en algún anuncio que les interese si es que quieren agradecer de manera un poco más lucrativa, seguiremos aprendiendo de MySQL en futuros post. Muchas Gracias









Banderas de Visitantes

Flag Counter