Traductor de preguntas de negocio a SQL
Clase 19 de 24 • Curso de SQL y MySQL 2018
Contenido del curso
CREATE
INSERT
Bash y archivos SQL
SELECT
Consultas en MySQL
Contenido Bonus
Convertir datos en información, luego en insights y finalmente en acciones es clave para el negocio. Aquí verás cómo traducir preguntas reales del administrador de una biblioteca en consultas SQL claras en MySQL, usando distinct, count, group by, order by, manejo de NULL y filtros eficientes.
¿Cómo orientar SQL a objetivos de negocio?
Antes del código, importa el objetivo: responder preguntas que impacten el negocio. Se parte de dudas simples del catálogo de autores, como: ¿qué nacionalidades hay? y ¿cuántos autores hay por nacionalidad?. Así se conecta la base de datos con decisiones: más clientes, más seguidores, más ingresos.
- Prioriza requerimientos reales del cliente o del propio negocio.
- Traduce preguntas a consultas SQL concretas.
- Enfócate en entregar respuestas accionables.
¿Qué nacionalidades hay y cómo contarlas?
Para un catálogo de autores, primero se identifican valores únicos y luego se cuantifican por categoría. Aquí aparecen conceptos fundamentales: SELECT, distinct, COUNT, group by, order by, NULL y alias.
¿Cómo obtener valores únicos con distinct?
Problema inicial: SELECT trae duplicados y nulos.
-- Trae todos los valores (incluye duplicados y NULL)
SELECT nationality FROM authors;
-- Trae solo valores únicos (incluye NULL) y ordena alfabéticamente
SELECT DISTINCT nationality
FROM authors
ORDER BY nationality ASC;
- Resultado clave: hay 15 valores únicos incluyendo NULL. Sin NULL, son 14 nacionalidades distintas.
- Nota de calidad de datos: aparecen códigos distintos para un mismo país (por ejemplo, ENG y GBR para Inglaterra). Se abordará más adelante.
- Observación de orden: NULL va primero al ordenar ascendente, porque representa “vacío”.
¿Cómo contar por categoría con group by?
Error frecuente: usar COUNT sin agrupar.
-- Incorrecto: COUNT sin agrupar por nationality
SELECT nationality, COUNT(author_id)
FROM authors;
Solución correcta con group by y alias legible.
SELECT
nationality,
COUNT(author_id) AS c_authors
FROM authors
GROUP BY nationality
ORDER BY c_authors DESC;
Hallazgos ilustrativos: - Estados Unidos: 26 autores. - Inglaterra: 10 autores. - India: 6 autores. - Suecia, México y Austria: 2 autores cada uno. - Argentina: 1 autor.
¿Cómo ordenar por múltiples columnas?
Empata valores con un segundo criterio alfabético.
SELECT
nationality,
COUNT(author_id) AS c_authors
FROM authors
GROUP BY nationality
ORDER BY c_authors DESC, nationality ASC;
- El orden se evalúa en secuencia: primero por cantidad, luego por nacionalidad.
- Puedes combinar direcciones: descendente y luego ascendente, según convenga.
¿Cómo filtrar y ordenar con precisión?
El filtrado mejora la calidad del análisis y puede optimizar rendimiento si se estructuran bien las condiciones. Aquí destacan WHERE, IS NULL, IS NOT NULL, IN y NOT IN.
¿Cómo filtrar null e incluir o excluir países?
Excluir nulos y refinar por lista de códigos.
-- Quita los registros sin nacionalidad
SELECT nationality, COUNT(author_id) AS c_authors
FROM authors
WHERE nationality IS NOT NULL
GROUP BY nationality;
-- Excluir países específicos (por ejemplo, RUS y AUT)
SELECT nationality, COUNT(author_id) AS c_authors
FROM authors
WHERE nationality IS NOT NULL
AND nationality NOT IN ('RUS', 'AUT')
GROUP BY nationality;
-- Incluir solo ciertos países
SELECT nationality, COUNT(author_id) AS c_authors
FROM authors
WHERE nationality IN ('RUS', 'AUT')
GROUP BY nationality;
- Dato relevante: hay 71 autores con nacionalidad NULL; conviene filtrarlos cuando no aportan al análisis.
- Ventaja práctica: usar códigos consistentes (por ejemplo, estándares ISO) y la idea de convention over configuration facilita filtros confiables.
¿Por qué importa el orden de las condiciones?
Ordenar condiciones en WHERE puede reducir trabajo innecesario.
-- Primero descarta NULL (barato), luego aplica filtros de texto (más costosos)
SELECT nationality, COUNT(author_id) AS c_authors
FROM authors
WHERE nationality IS NOT NULL
AND nationality NOT IN ('RUS', 'AUT')
GROUP BY nationality
ORDER BY c_authors DESC, nationality ASC;
- Primero elimina lo más general y barato: NULL.
- Después aplica comparaciones de cadenas: listas IN/NOT IN u otros criterios.
- Resultado: búsquedas de texto sobre un subconjunto más pequeño.
Habilidades y conceptos reforzados: - Diseño de consultas orientadas al negocio: respuestas accionables en lugar de listados crudos. - Manejo de duplicados con distinct. - Agregación con COUNT y group by. - Ordenamientos compuestos con order by múltiple. - Tratamiento de valores faltantes con NULL, IS NULL y IS NOT NULL. - Filtrado por listas con IN y NOT IN. - Legibilidad con alias descriptivos. - Eficiencia: orden de condiciones en WHERE.
¿Tienes otra pregunta de negocio que quisieras traducir a SQL en MySQL? Compártela y la resolvemos juntos.