Los datos ya están ahí. Aprende a hacerles preguntas.
La historia hasta ahora La cadena de bicicletas (Lecciones 16.1 a 16.3) guarda cada venta en una base de datos: qué tienda, qué mes y cuánto. Tu gerente pregunta: "¿Cuánto vendió Austin este trimestre?" Nadie te manda una hoja de cálculo. La respuesta está en una tabla con millones de filas, y la forma de sacarla es SQL, un lenguaje para hacerle preguntas a una base de datos. Casi todos los bancos, fondos y empresas guardan sus datos así, y SQL es una de las habilidades que más piden los anuncios de trabajo en finanzas.
SQL (se dice "ese-cu-ele" o, en inglés, "sequel") es un lenguaje para sacar datos de una base de datos: las filas que quieres, sumadas como quieres.
Los datos de una empresa son demasiado grandes para una hoja de cálculo. SQL trae solo lo que necesitas, muchas veces en segundos, de entre millones de filas.
Escribes una consulta: SELECT las columnas, FROM una tabla, WHERE las filas cumplen una regla, y luego ordenas, cuentas o sumas.
En análisis de datos y análisis financiero sacan reportes con él. Los equipos de riesgos y de cumplimiento revisan operaciones. En análisis cuantitativo cargan precios antes de usar Python.
Qué estás viendo: una base de datos de ventas a la izquierda y la respuesta a la derecha. El recuadro oscuro es la consulta de SQL que la pide: suma la columna amount (el monto), de la tabla sales (ventas), pero solo las filas donde la tienda es Austin. La respuesta es $3,900.
Una base de datos es un conjunto de tablas.
Una base de datos guarda los datos en tablas. Cada fila es un registro, como una venta; cada columna es un tipo de dato, como la tienda o el monto. SQL es la forma de pedirlos, y cada pregunta es una consulta. Esta es la tabla de ventas de la cadena en un trimestre. Una real tiene millones de filas; las reglas son las mismas. Los nombres van en inglés, como en el trabajo: store es la tienda, month el mes y amount el monto.
| store | month | amount |
|---|---|---|
| Austin | Jan | 1200 |
| Denver | Jan | 900 |
| Miami | Jan | 1500 |
| Austin | Feb | 1400 |
| Denver | Feb | 700 |
| Miami | Feb | 1600 |
| Austin | Mar | 1300 |
| Denver | Mar | 1100 |
| Miami | Mar | 1700 |
Qué estás viendo: la tabla sales (ventas): 9 filas (una por tienda por mes) y 3 columnas. Jan, Feb y Mar son enero, febrero y marzo. Los montos están en dólares.
SELECT, FROM y WHERE
Toda consulta empieza con SELECT (qué columnas) y FROM (qué tabla). * significa todas las columnas. WHERE deja solo las filas que pasan una prueba. El texto va entre comillas simples, como 'Austin', y un punto y coma termina la consulta. AND une dos pruebas: una fila debe pasar las dos. > significa mayor que y < significa menor que; un valor igual al número no pasa.
SELECT month, amount
FROM sales
WHERE store = 'Austin';Jan 1200
Feb 1400
Mar 1300- SELECT month, amount
- Solo vuelven esas dos columnas: el mes y el monto.
- WHERE store = 'Austin'
- Deja 3 de las 9 filas.
- Agrega AND amount > 1250
- Solo febrero (1400) y marzo (1300) pasan las dos pruebas.
ORDER BY y LIMIT
ORDER BY ordena los resultados; agrega DESC para poner el más grande primero. LIMIT deja solo las primeras filas. Juntos responden "¿cuáles fueron nuestros 3 mejores?"
SELECT store, month, amount
FROM sales
ORDER BY amount DESC
LIMIT 3;Miami Mar 1700
Miami Feb 1600
Miami Jan 1500- Los 3 mejores meses
- Todos de Miami: 1700, 1600 y 1500.
Sumar: COUNT, SUM, AVG y GROUP BY
SQL puede resumir mientras trae los datos. COUNT(*) cuenta filas, SUM() suma una columna y AVG() saca el promedio. GROUP BY primero divide las filas en grupos, así obtienes una respuesta por grupo, como una fila de totales para cada tienda.
SELECT store, SUM(amount), AVG(amount)
FROM sales
GROUP BY store;Austin 3900 1300
Denver 2700 900
Miami 4800 1600- COUNT(*) FROM sales
- 9 filas.
- SUM de Austin
- 1200 + 1400 + 1300 = 3900, la respuesta a la pregunta de tu gerente.
- AVG de Austin
- 39003 = 1300 al mes.
Elige una pregunta para la tabla de ventas
Qué estás viendo: cuatro consultas sobre la misma tabla de ventas de 9 filas. Elige una para ver el SQL y la tabla que devuelve la base de datos.
JOIN: conecta dos tablas
Las bases de datos reparten los datos en muchas tablas para no escribir nada dos veces. JOIN las vuelve a juntar emparejando una columna que tienen en común.
SELECT stores.manager, SUM(sales.amount)
FROM sales
JOIN stores ON sales.store = stores.store
GROUP BY stores.manager;Kim 2700
Lopez 4800
Rivera 3900- La tabla stores (tiendas)
- Austin: gerente Rivera. Denver: Kim. Miami: Lopez.
- Emparejadas por tienda
- Cada venta encuentra al gerente de su tienda, así que las tiendas de Lopez vendieron 4800.
El orden de las cláusulas
Puedes saltarte las que no necesites, pero las que uses deben ir en este orden.
Dos minutos. Solo escucha.
Toca cualquier línea para saltar a ella.
Revisa la consulta.
Ocho preguntas sobre la misma tabla de ventas de 9 filas, que se muestra aquí. Un intento por pregunta.
| store | Jan | Feb | Mar |
|---|---|---|---|
| Austin | 1200 | 1400 | 1300 |
| Denver | 900 | 700 | 1100 |
| Miami | 1500 | 1600 | 1700 |
Qué estás viendo: los montos de ventas acomodados por tienda y mes (cada número es una fila de la tabla sales), luego una consulta y una pregunta sobre ella.
La lógica, paso a paso.
Para convertir cualquier pregunta en una consulta, sigue cuatro pasos.
Paso 1: ¿Qué tabla?
- El trimestre de Austin
- FROM sales.
Paso 2: ¿Qué filas?
- El filtro
- WHERE store = 'Austin': 3 filas.
Paso 3: ¿Resumir?
- El total
- SELECT SUM(amount): 3900.
Paso 4: Ordena y recorta
- Un solo número
- No hay nada que ordenar: la respuesta es una fila.
Ejemplo resuelto: los meses flojos de Denver
La gerencia regional pregunta: "¿En qué meses vendió Denver menos de $1,000?" Estos son los datos:
- La tabla: sales, con store, month y amount.
- Dos pruebas: la tienda es Denver y el monto es menor que 1000.
- Lo que se pide: los meses, del más chico al más grande.
SELECT month, amount
FROM sales
WHERE store = 'Denver' AND amount < 1000
ORDER BY amount;Feb 700
Jan 900- Tabla. FROM sales.
- Filas. Denver tiene enero 900, febrero 700 y marzo 1100. Con AND, las dos pruebas deben pasar, así que marzo queda fuera.
- Orden. ORDER BY amount sin DESC pone el más chico primero.
- La respuesta. Febrero ($700) y enero ($900). Denver se recuperó en marzo ($1,100), y eso también vale la pena contárselo a la gerencia.
Un ave que consulta su memoria.
Cada otoño, el cascanueces americano, un ave de las montañas del oeste de Norteamérica, esconde decenas de miles de semillas de pino en miles de escondites pequeños repartidos por las laderas. Meses después, muchas veces bajo la nieve, regresa y desentierra los lugares correctos, usando rocas y árboles como señales.
Qué estás viendo: una ilustración, no datos. Los puntos cafés son escondites de semillas repartidos en una ladera; los círculos verdes son los pocos que el cascanueces está desenterrando hoy.
Por qué se te queda. El ave no escarba toda la montaña; va directo a los escondites que quiere. Una buena consulta hace lo mismo: la base de datos lo guarda todo, y WHERE te lleva directo a las filas que necesitas.
La página que copiarías.
- Base de datos = tablas. Fila = un registro; columna = un tipo de dato. Una consulta hace una pregunta en SQL.
- SELECT columnas FROM tabla WHERE prueba. * = todas las columnas. Texto entre 'comillas simples'. AND = las dos pruebas.
- Solo Austin: enero 1200, febrero 1400, marzo 1300.
- ORDER BY amount DESC LIMIT 3: Miami 1700, 1600, 1500.
- COUNT(*) = 9 filas. SUM de Austin = 3900. AVG = 39003 = 1300.
- GROUP BY store: Austin 3900, Denver 2700, Miami 4800.
- JOIN une dos tablas por una columna en común (tienda → gerente).
- Orden: SELECT, FROM, JOIN, WHERE, GROUP BY, ORDER BY, LIMIT.
Completa los espacios
Busca a alguien o a tu grupo de estudio.
Base de datos humana
Escriban cada venta en una tarjeta. Una persona lee una consulta en voz alta; las demás levantan solo las tarjetas que cumplen y las suman.
De pregunta a consulta
Por turnos, hagan una pregunta sencilla sobre la tabla de ventas, como "¿Qué tienda vendió menos en febrero?" Las demás personas escriben el SQL.
Pruébenlo de verdad
Busquen un espacio gratis en línea para practicar SQL, peguen la tabla de ventas y corran las consultas de la lección. Luego inventen las suyas.
Solo tú y tu dinero.
Esto se queda en este dispositivo. Nadie más lo ve.
Preguntas tipo examen.
Escritas como las haría un examen universitario. Cada respuesta correcta al primer intento vale 10 xp.
En el trabajo: haces análisis de datos en la cadena de bicicletas
La dirección de finanzas se reúne mañana con la gerencia de cada tienda y te manda un mensaje: "¿Qué tienda tuvo las ventas totales más altas este trimestre, y cuál fue su promedio mensual?" Esto es lo que tienes:
- La tabla: sales, con store, month y amount (las 9 filas de esta lección).
- Lo que se pide: una fila, con la tienda, su total y su promedio.
Tu tarea: escribe una consulta que responda las dos cosas, y la respuesta que mandarías.
Ver una respuesta modelo
SELECT store, SUM(amount), AVG(amount)
FROM sales
GROUP BY store
ORDER BY SUM(amount) DESC
LIMIT 1;Miami 4800 1600Para la dirección de finanzas: Miami encabezó el trimestre con $4,800 en ventas, un promedio de $1,600 al mes, y creció cada mes (1500, 1600, 1700). Austin quedó en segundo lugar con $3,900.
Hacia dónde va.
Qué estás viendo: un mapa de dónde encaja esta lección en el curso. Léelo de izquierda a derecha: las lecciones en las que se basa, esta lección en el centro y hacia dónde va.
- Antes · Unidad 17Hojas de cálculo para finanzas
- Antes · Unidad 17Python para finanzas
- Antes · Unidad 12El estado de resultados
- Estás aquíSQL para finanzas
- Muy pronto · Unidad 18Currículum y LinkedIn para finanzas
Esa es la caja de herramientas de un analista: hojas de cálculo para modelar, Python para repetir y crecer, SQL para sacar los datos. La Unidad 18 lo convierte en un trabajo: tu currículum, tus contactos y la entrevista.