Lección 6: Funciones
Dentro de SQL disponemos de algunas funcionalidades, o herramientas, que nos permiten realizar operaciones interesantes sin salirnos del lenguaje: valor mínimo, valor máximo, contar, calcular la media, sumar o crear alias. A ello se le llama funciones de agregación, o en inglés aggregate functions.
MIN()
Devuelve el valor más bajo de cierta columna.
¿Cual es la factura más baja?
SELECT MIN(Total) FROM Invoice;
0.99
MAX()
Devulve el valor más alto de cierta columna.
¿Cual es la factura más alta?
SELECT MAX(Total) FROM Invoice;
25.86
¿Quién lo pago?
SELECT FirstName, LastName FROM Customer WHERE CustomerId = (SELECT CustomerId from Invoice WHERE Total IN (SELECT MAX(Total) FROM Invoice));
Helena Holý
¡Gracias Helena! Estas pagando la universidad de mis hijos.
COUNT()
Nos ayuda a contar el número de resultados.
¿Cuantas facturas tengo del 2013?
SELECT COUNT(Total) FROM Invoice WHERE InvoiceDate LIKE '2013-%';
80
AVG()
Calcula la media. En otras palabras, suma todos los elementos y lo divide por su número.
¿Cuanto es la media de gasto por usuario?
SELECT AVG(Total) FROM Invoice;
5.65
SUM()
sUMa los valores de una columna.
¿Cuanto dinero he facturado en total?
SELECT SUM(Total) FROM Invoice;
2328.6
¿He facturado más en 2012 o 2013?
SELECT SUM(Total) FROM Invoice WHERE InvoiceDate LIKE '2012-%';
477.53
SELECT SUM(Total) FROM Invoice WHERE InvoiceDate LIKE '2013-%';
450.58
¡Ups! Estamos perdiendo dinero.
alias
Cuando disponemos de muchas columnas, con nombres más cercanos al pensamiento de un robot que a su creador, es posible que empiecen los errores (humanos).
Por ejemplo.
SELECT TrackId FROM InvoiceLine WHERE InvoiceId = 4;
TrackId
42
48
54
60
66
72
78
84
90
Podemos mejorarlo gracias a las alias, añadiendo AS
y el nuevo nombre temporal.
SELECT TrackId AS Song FROM InvoiceLine WHERE InvoiceId = 4;
Song
42
48
54
60
66
72
78
84
90
Incluso con otras columnas.
SELECT InvoiceLineId AS Id, TrackId AS Song, UnitPrice AS Price FROM InvoiceLine WHERE InvoiceId = 4;
Id | Song | Price
13 42 0.99
14 48 0.99
15 54 0.99
16 60 0.99
17 66 0.99
18 72 0.99
19 78 0.99
20 84 0.99
21 90 0.99
Creando una vista para combinar funciones de agregación
Imagina que queremos crear una vista que nos muestre un resumen de las facturas (Invoice) por año. Esta vista incluirá el año, el número total de facturas, el total facturado, la factura más alta y la factura más baja para cada año.
CREATE VIEW resumen_facturas_por_anio AS
SELECT
strftime('%Y', InvoiceDate) AS Anio, -- Extraemos el año de la fecha
COUNT(InvoiceId) AS Total_Facturas, -- Contamos el número de facturas
SUM(Total) AS Total_Facturado, -- Sumamos el total facturado
MAX(Total) AS Factura_Mas_Alta, -- Obtenemos la factura más alta
MIN(Total) AS Factura_Mas_Baja -- Obtenemos la factura más baja
FROM
Invoice
GROUP BY
strftime('%Y', InvoiceDate); -- Agrupamos por año
- Extrae el año de la columna
InvoiceDate
usandostrftime('%Y', InvoiceDate)
. - Cuenta el número de facturas por año con
COUNT(InvoiceId)
. - Suma el total facturado por año con
SUM(Total)
. - Obtiene la factura más alta y más baja por año con
MAX(Total)
yMIN(Total)
. - Agrupa los resultados por año usando
GROUP BY
.
Ahora que hemos creado la vista, podemos consultarla fácilmente para obtener el resumen de facturas por año:
SELECT * FROM resumen_facturas_por_anio;
Anio | Total_Facturas | Total_Facturado | Factura_Mas_Alta | Factura_Mas_Baja
2009 83 449.46 13.86 0.99
2010 83 481.45 21.86 0.99
2011 83 469.58 21.86 0.99
2012 83 477.53 23.86 0.99
2013 80 450.58 25.86 0.99
Este ejemplo muestra cómo las vistas pueden ser una herramienta poderosa para combinar funciones de SQL y simplificar consultas complejas: Simplifica la consulta de datos, evita la repetición de código y es más fácil de mantener.
Siempre estamos trabajando con una sola tabla. ¿Qué pasa si queremos combinar datos de varias tablas? Por ejemplo, si queremos mostrar el nombre del cliente junto con el resumen de facturas. ¿Cómo podemos hacerlo?
En la siguiente lección, aprenderemos a hacerlo con JOIN
.
Actividad 1
De la tabla Track
, consigue la siguiente información.
- Cual es el título de la canción que menos pesa (
Bytes
). - Cual es el título de la canción que más dura (
Miliseconds
). - Cuantas canciones cuestan 1$ o más.
- Cuantas canciones hay de Queen.
- Cual es la media de duración entre todas las canciones.
- Cual es la media de peso entre todas las canciones de U2.
- Cuantas canciones esta Bill Berry como
Composer
(Compositor). - Un Mb son: Bite / 1024 / 1024. Muestra todos los
Track
s calculando, y renombrando, la columnaBytes
enMb
.
Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.
¿Me invitas a un café? ☕
Puedes hacerlo usando el terminal.
ssh customer@andros.dev -p 5555
Comentarios
Nuevo comentario
Nueva replica {{ formatEllipsisAuthor(replyComment.author) }}
Escribe el primer comentario
{{ comments.length }} comentarios