Aprende a obtener valor real de tus datos con consultas SQL claras. Desde precios promedio y desviación estándar hasta reportes finales con clientes, libros y autores, verás cómo combinar tablas, ordenar resultados y trabajar con fechas para convertir datos en información accionable.
¿Cómo explorar precios con select, order by y agregaciones?
Con una columna basta para empezar. Un simple “trae precios” permite observar el rango de valores y preparar agregaciones más útiles.
Usa select para aislar columnas clave. Por ejemplo: precios.
Ordena con order by price desc limit 10 para ver los más caros.
Cambia a asc para detectar los precios más bajos.
Calcula promedio con la función AVG y desviación estándar con STDDEV para entender dispersión.
Ejemplos de consultas:
-- Precios aisladosSELECT price FROM books;-- Títulos y precios más carosSELECT title, price
FROM books
ORDERBY price DESCLIMIT10;-- Agregaciones globalesSELECTAVG(price)AS precio_promedio, STDDEV(price)AS desviacion_estandar
FROM books;
Lo interesante llega al cruzar datos. Con JOIN entre libros y autores y GROUP BY por nacionalidad, obtienes precio promedio y desviación estándar por país, y además puedes contar cuántos libros aporta cada uno.
SELECT a.nationality,COUNT(b.book_id)AS libros,AVG(b.price)AS precio_promedio, STDDEV(b.price)AS desviacion_estandar
FROM books AS b
JOIN authors AS a ON a.author_id = b.author_id
GROUPBY a.nationality
ORDERBY libros DESC;
Claves prácticas:
El grupo depende de una “columna pivote” bien elegida: aquí, nationality.
Si un país tiene un solo libro, la desviación estándar es 0.
Los nulos importan: una nacionalidad NULL puede concentrar muchos libros aunque falten datos del autor.
Ejemplos útiles: precio máximo visto 34.82; promedios cercanos a 22.39; Estados Unidos con 34 libros y promedio 22.12.
¿Por qué ordenar por libros en lugar de promedio?
Porque el volumen da contexto a los promedios.
Una media con pocos datos puede inducir a error.
Ordenar por libros DESC prioriza nacionalidades con más representatividad.
¿Qué revelan max y min por nacionalidad?
Además del promedio, los extremos muestran la amplitud de precios por país.
-- Máximo y mínimo globalesSELECTMAX(price)AS precio_maximo,MIN(price)AS precio_minimo
FROM books;-- Extremos por nacionalidadSELECT a.nationality,MAX(b.price)AS max_por_pais,MIN(b.price)AS min_por_pais
FROM books AS b
JOIN authors AS a ON a.author_id = b.author_id
GROUPBY a.nationality;
Observaciones prácticas:
País con un solo libro: máximo = mínimo.
Estados Unidos exhibe rango amplio: por ejemplo, de 34.82 a 10.17.
Ver extremos ayuda a detectar oportunidades (catálogo caro/barato) y anomalías.
¿Cómo elegir la columna pivote correctamente?
Piensa en la pregunta de negocio: por país, por autor, por cliente.
Evita ambigüedades: agrupa por la columna que resumes en pantalla.
Revisa nulos y consistencia: afectan totales y estadísticas.
¿Cómo armar un reporte final con joins, concat y fechas?
Un reporte legible combina transacciones, clientes, libros y autores. Se recomienda LEFT JOIN desde la tabla de transactions y proyectar las columnas clave.
SELECT T.type, B.title, CONCAT(A.name,' (', A.nationality,')')AS autor
FROMtransactionsAS T
LEFTJOIN clients AS C ON C.client_id = T.client_id
LEFTJOIN books AS B ON B.book_id = T.book_id
LEFTJOIN authors AS A ON B.author_id = A.author_id;
Mejoras de lectura:
Usa CONCAT para mostrar “Nombre (nacionalidad)” en una sola columna.
Aplica alias claros: autor, libros, precio_promedio, etc.
Para trabajar con fechas, la función TODAYS convierte una fecha a el número de días desde el inicio de la era. Esto facilita comparaciones numéricas directas: ayer, hoy, hace X días.
-- Días desde el inicio de la era hasta ahoraSELECT TODAYS(NOW());-- Días vividos por clienteSELECT name, TODAYS(birthdate)AS dias_desde_origen
FROM clients;-- “Hace cuánto” sucedió cada transacciónSELECT T.type, B.title, TODAYS(NOW())- TODAYS(T.created_at)AS ago
FROMtransactionsAS T
LEFTJOIN books AS B ON B.book_id = T.book_id;
Ideas clave con fechas:
TODAYS(NOW()) entrega un entero usable en restas.
Diferencia de TODAYS entre hoy y created_at da el “ago” en días.
Útil para saber hace cuánto se rentó o vendió un libro.
Ejemplo real: una transacción con fecha 2018-01-01 resultó en 99 días de diferencia frente a los datos insertados hoy.
¿Qué habilidades consolidas con estos casos?
Construir consultas con select, order by, limit y alias claros.
Agregar con avg, stddev, count, max, min y group by.
Cruzar tablas con join y left join a partir de una tabla clave.
Formatear columnas con concat para resultados legibles.
Operar fechas con todays y now para métricas de tiempo.
Interpretar nulos, conteos y dispersión para decisiones de negocio.
¿Quieres que integremos filtros por rango de fechas, tipo de transacción o país, y generemos un dashboard mínimo con estas consultas? Comparte qué vista te serviría más.