Las funciones agregadas se tratan
- Realizar cálculos en varias filas
- De una sola columna de una tabla
- Y devolviendo un solo valor.
La norma ISO define cinco (5) funciones agregadas a saber;
1) CUENTA
3) PROMEDIO
4) MÍNIMO
5) MÁXIMO
Por qué utilizar funciones agregadas.
Desde una perspectiva empresarial, los diferentes niveles de la organización tienen diferentes requisitos de información. Los gerentes de alto nivel suelen estar interesados en conocer cifras completas y no necesariamente los detalles individuales.
> Las funciones de agregación nos permiten producir fácilmente datos resumidos de nuestra base de datos.
Por ejemplo, de nuestra base de datos myflix, la administración puede requerir los siguientes informes
- Películas menos alquiladas.
- La mayoría de películas alquiladas.
- Número medio que se alquila cada película en un mes.
Producimos fácilmente los informes anteriores utilizando funciones agregadas.
Analicemos las funciones agregadas en detalle.
Función COUNT
La función COUNT devuelve el número total de valores en el campo especificado. Funciona con tipos de datos numéricos y no numéricos. Todas las funciones agregadas excluyen de forma predeterminada los valores nulos antes de trabajar con los datos.
COUNT (*) es una implementación especial de la función COUNT que devuelve el recuento de todas las filas en una tabla especificada. COUNT (*) también considera nulos y duplicados.
La tabla que se muestra a continuación muestra los datos en la tabla de movierentals
número de referencia | Fecha de Transacción | Fecha de regreso | número de socio | movie_id | película_ devuelta |
---|---|---|---|---|---|
11 | 20-06-2012 | NULO | 1 | 1 | 0 |
12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
15 | 23-06-2012 | NULO | 3 | 3 | 0 |
Supongamos que queremos obtener el número de veces que se ha alquilado la película con id 2
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
La ejecución de la consulta anterior en MySQL workbench contra myflixdb nos da los siguientes resultados.
COUNT('movie_id') |
---|
3 |
Palabra clave DISTINCT
La palabra clave DISTINCT que nos permite omitir duplicados de nuestros resultados. Esto se logra agrupando valores similares.
Para apreciar el concepto de Distinct, ejecutemos una consulta simple
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
Ahora ejecutemos la misma consulta con la palabra clave distinta:
SELECT DISTINCT `movie_id` FROM `movierentals`;
Como se muestra a continuación, se omiten distintos registros duplicados de los resultados.
movie_id |
---|
1 |
2 |
3 |
Función MIN
La función MIN devuelve el valor más pequeño en el campo de tabla especificado .
Como ejemplo, supongamos que queremos saber el año en el que se lanzó la película más antigua de nuestra biblioteca, podemos usar la función MIN de MySQL para obtener la información deseada.
La siguiente consulta nos ayuda a lograr eso
SELECT MIN(`year_released`) FROM `movies`;
La ejecución de la consulta anterior en MySQL workbench contra myflixdb nos da los siguientes resultados.
MIN('year_released') |
---|
2005 |
Función MAX
Tal como sugiere el nombre, la función MAX es lo opuesto a la función MIN. Se devuelve el valor más grande desde el campo de la tabla especificada .
Supongamos que queremos obtener el año en que se lanzó la última película de nuestra base de datos. Podemos usar fácilmente la función MAX para lograrlo.
El siguiente ejemplo devuelve el último año de película lanzado.
SELECT MAX(`year_released`) FROM `movies`;
La ejecución de la consulta anterior en MySQL workbench usando myflixdb nos da los siguientes resultados.
MAX('year_released') |
---|
2012 |
Función SUM
Supongamos que queremos un informe que proporcione la cantidad total de pagos realizados hasta el momento. Podemos usar la función SUMA de MySQL que devuelve la suma de todos los valores en la columna especificada . SUM funciona solo en campos numéricos . Los valores nulos se excluyen del resultado devuelto.
La siguiente tabla muestra los datos en la tabla de pagos.
id_pago | número de socio | fecha de pago | descripción | cantidad pagada | número_de_referencia_externa |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Pago de alquiler de película | 2500 | 11 |
2 | 1 | 25-07-2012 | Pago de alquiler de película | 2000 | 12 |
3 | 3 | 30-07-2012 | Pago de alquiler de película | 6000 | NULO |
La consulta que se muestra a continuación obtiene todos los pagos realizados y los suma para devolver un único resultado.
SELECT SUM(`amount_paid`) FROM `payments`;
La ejecución de la consulta anterior en MySQL workbench contra myflixdb da los siguientes resultados.
SUM('amount_paid') |
---|
10500 |
Función AVG
La función MySQL AVG devuelve el promedio de los valores en una columna especificada . Al igual que la función SUMA, solo funciona con tipos de datos numéricos .
Suponga que queremos encontrar la cantidad promedio pagada. Podemos usar la siguiente consulta:
SELECT AVG(`amount_paid`) FROM `payments`;
Ejecutar la consulta anterior en MySQL workbench, nos da los siguientes resultados.
AVG('amount_paid') |
---|
3500 |
Resumen
- MySQL admite las cinco (5) funciones agregadas estándar ISO COUNT, SUM, AVG, MIN y MAX.
- Las funciones SUM y AVG solo funcionan con datos numéricos.
- Si desea excluir valores duplicados de los resultados de la función agregada, utilice la palabra clave DISTINCT. La palabra clave ALL incluye incluso duplicados. Si no se especifica nada, se asume que TODO es el valor predeterminado.
- Las funciones agregadas se pueden utilizar junto con otras cláusulas SQL como GROUP BY
Rompecabezas
Crees que las funciones agregadas son fáciles. ¡Prueba esto!
El siguiente ejemplo agrupa a los miembros por nombre, cuenta el número total de pagos, el monto de pago promedio y el total general de los montos de pago.
SELECT m.`full_names`,COUNT(p.`payment_id`) AS `paymentscount`,AVG(p.`amount_paid`) AS `averagepaymentamount`,SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
La ejecución del ejemplo anterior en MySQL workbench nos da los siguientes resultados.