Funciones de agregación

Categories:

Las funciones de agregación nos permiten obtener datos – que no están almacenados en las tablas – a partir de datos que están almacenados en las tablas.

COUNT

La función COUNT se utiliza para realizar conteos. Ésta función recibe un parámetro que puede ser un asterisco – toma en cuenta que el registro ‘exista’ – o el nombre de una columna – toma en cuenta los registros cuyo valor en la columna no sea NULL – .

Si se realiza una expresión primero se filtran los resultados y después se hace el conteo.

-- Obtener cuántos registros existen
-- en la tabla de publicaciones

SELECT COUNT(*) FROM publicaciones;

-- Obtener el número de publicaciones que
-- en al columna nivel_id tienen asignado el valor 1.

SELECT COUNT(*) FROM publicaciones WHERE nivel_id = 1;

-- Obtener el número de publicaciones
-- que tienen un valor asignado en la 
-- columna nivel_id. 
-- No importa cuál es ese valor.

SELECT COUNT(nivel_id) FROM publicaciones;

NOTA:

Si se requiere contar los registros que tengan valor NULL en algún atributo, primero seleccionamos los registros que no tengan un valor asignado – que sea NULL – en una columna y después hacemos el conteo utilizando otra columna donde estemos seguros que no existan valores NULL – como la llave primaria – o utilizamos asterisco – * -.

-- Obtener el número de publicaciones
-- que NO tienen un valor asignado en la 
-- columna nivel_id. 

SELECT COUNT(id) FROM publicaciones WHERE nivel_id IS NULL;

SELECT COUNT(*) FROM publicaciones WHERE nivel_id IS NULL;

DISTINCT

Selecciona los valores que son distintos en una columna. Esta función recibe como parámetro el nombre de la columna de la cuál se quieren obtener los valores que son distintos.

-- Obtener los valores que son distintos
-- en la columna usuario_id
-- de la tabla publicaciones

SELECT DISTINCT(usuario_id) FROM publicaciones;

-- Obtener los valores que son distintos
-- en la columna nivel_id
-- de la tabla publicaciones

SELECT DISTINCT(nivel_id) FROM publicaciones;

NOTA:
A diferencia de COUNT, al utilizar DISTINCT, NULL si es tomado en cuenta.

COUNT + DISTINCT

Podemos utilizar las funciones COUNT y DISTINCT para obtener la cantidad de registros que son diferentes en una columna.

-- Obtener la cantidad de valores distintos 
-- que están almacenados en la columna
-- usuario_id de la tabla publicaciones.

SELECT COUNT(DISTINCT(usuario_id)) FROM publicaciones;

-- Obtener la cantidad de valores distintos 
-- que están almacenados en la columna
-- nivel_id de la tabla publicaciones.

SELECT COUNT(DISTINCT(nivel_id)) FROM publicaciones;

Las funciones se realizan de adentro hacia afuera, primero se obtienen los elementos que son distintos para después realizar el conteo.

En este caso, aunque DISTINCT devuelva NULL como un valor distinto en la columna NO va a ser tomado en cuenta por COUNT al realizar el conteo.

AVG *

Con AVG – average / promedio – podemos obtener el valor promedio de una columna basado en los resultados obtenidos de una consulta.

-- Obtener el promedio de la columna vistas
-- de las tabla publicaciones.
-- El promedio va a realizar una sumatoria de 
-- todos los valores de esa columna y lo divide
-- entre el número de registros que fueron utilizados.

SELECT AVG(vistas) FROM publicaciones;

-- Obtener el promedio de la columna vistas
-- de las tabla publicaciones. 
-- Antes de realizar el promedio únicamente se 
-- utilizan los registros cuyo valor en la columna 
-- usuario_id es 4. 
-- Después de filtrar los registros se realiza la sumatoria
-- en los registros resultantes y se divide entre
-- ese número de registros

SELECT AVG(vistas) FROM publicaciones WHERE usuario_id = 4;

MAX *
Con MAX – maximum / máximo – podemos obtener valor máximo que está almacenado en una columna basado en los resultados obtenidos de una consulta.

-- Obtener el valor mayor almacenado
-- en la columna vistas
-- de las tabla publicaciones.

SELECT MAX(vistas) FROM publicaciones;

-- Obtener el valor mayor almacenado
-- en la columna vistas
-- de las tabla publicaciones
-- El valor sólo va a tomar de los registros 
-- que tengan el valor 4 en la columna usuario_id

SELECT MAX(vistas) FROM publicaciones WHERE usuario_id = 4;

MIN *
Con MIN – minimum / mínimo – podemos obtener el valor mínimo de una columna basado en los resultados obtenidos de una consulta.

-- Obtener el valor menor almacenado
-- en la columna vistas
-- de las tabla publicaciones.

SELECT MIN(vistas) FROM publicaciones;

-- Obtener el valor menor almacenado
-- en la columna vistas
-- de las tabla publicaciones
-- El valor sólo va a tomar de los registros 
-- que tengan el valor 4 en la columna usuario_id

SELECT MIN(vistas) FROM publicaciones WHERE usuario_id = 4;

SUM *
Con SUM – sum / suma – podemos realizar una sumatoria de los valores almacenados en una columna basado en los resultados obtenidos de una consulta..

-- Realiza una sumatoria de los 
-- valores almacenados 
-- en la columna vistas
-- de las tabla publicaciones.

SELECT SUM(vistas) FROM publicaciones;

-- Realiza una sumatoria de los 
-- valores almacenados 
-- en la columna vistas
-- de las tabla publicaciones.
-- El valor sólo va a tomar de los registros 
-- que tengan el valor 4 en la columna usuario_id

SELECT SUM(vistas) FROM publicaciones WHERE usuario_id = 4;

RAND
Con RAND – random / al azar – podemos genera un número aleatorio – entre 0 y 1 -.

-- Generar un número aleatorio entre 0 y 1
SELECT RAND();

-- Si lo queremos "ampliar" para que sea 
-- entre 0 y 10 lo multiplicamos.

SELECT RAND() * 10;

CEIL, FLOOR, ROUND
Estas funciones sirven para redondear los números decimales.

CEIL – ceiling / techo – : Redondea cualquier número decimal al entero inmediato superior.
FLOOR – floor / piso -: Redondea cualquier número decimal al entero inmediato inferior.
ROUND – round / redondear -: Si el valor del decimal es menor a .5 redondea el valor al entero inmediato inferior. Si el valor del decimal es mayor o igual a .5 redondea el valor al enter inmediato superior.

-- CEIL
-- Redondear al entero inmediato superior

SELECT CEIL(0.1); 
SELECT CEIL(0.0001); 
SELECT CEIL(0.9); 
SELECT CEIL(0.999); 

-- 1

-- FLOOR
-- Redondear al entero inmediato inferior

SELECT FLOOR(0.1); 
SELECT FLOOR(0.0001); 
SELECT FLOOR(0.9); 
SELECT FLOOR(0.9999); 

-- 0

-- ROUND
-- Si es menor a .5 redondear al entero inmediato inferior
-- Si es .5 o mayor redondear al entero inmediato superior

SELECT ROUND(0.1); 
SELECT ROUND(0.49999); 

-- 0

SELECT ROUND(0.5); 
SELECT ROUND(0.9999); 

-- 1

-- Para obtener valores aleatorios entre 
-- 0 y 10 podemos utilizar la función RAND() y la función 
-- ROUND()

SELECT ROUND(RAND() * 10);

-- Para obtener valores aleatorios entre 
-- 1 y 10 podemos utilizar la función RAND() y la función 
-- CEIL(). De esta manera, si algún valor queda entre 0 y 1
-- se va a redondear a 1

SELECT CEIL(RAND() * 10);

RAND
Regresando a la función RAND, esta función nos puede ser útil para ordenar – más adelante vamos a revisar más a detalle cómo ordenar – los registros de manera aleatoria.

-- Más adelante vamos a retomar
-- ORDER BY
SELECT id, titulo FROM publicaciones ORDER BY RAND();

* Utilizar en columnas cuyo tipo de dato sea numérico.

Además de poder realizar las tareas generales – crear, leer, actualizar, eliminar – de los datos, MySQL nos permiten obtener datos que, aunque no están almacenados en las tablas, nos pueden ser de utilidad.

NOTA:
Incluí otras funciones que no son propiamente de agregación – RAND, CEIL, FLOOR, ROUND, DISTINCT – porque consideré que funcionan bien junto con funciones de agregación.