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 usando strftime('%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) y MIN(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.

  1. Cual es el título de la canción que menos pesa (Bytes).
  2. Cual es el título de la canción que más dura (Miliseconds).
  3. Cuantas canciones cuestan 1$ o más.
  4. Cuantas canciones hay de Queen.
  5. Cual es la media de duración entre todas las canciones.
  6. Cual es la media de peso entre todas las canciones de U2.
  7. Cuantas canciones esta Bill Berry como Composer (Compositor).
  8. Un Mb son: Bite / 1024 / 1024. Muestra todos los Tracks calculando, y renombrando, la columna Bytes en Mb.

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me invitas a un café? ☕

Puedes hacerlo usando el terminal.

ssh customer@andros.dev -p 5555

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario