Saltar a contenido

Ejercicios SQL

Ejercicios básicos

A continuación se presenta un conjunto de tablas de ejemplo que pueden ser utilizadas para practicar consultas SQL fundamentales, tales como selección, agregación, joins y filtrado de datos.

Tablas de ejemplo

job_posting_fact

Esta tabla contiene información sobre ofertas de trabajo, incluyendo el título del puesto, salario promedio anual y ubicación.

job_id job_title_short job_title salary_year_avg job_location
1 Data Analyst Junior Data Analyst 95,000 Boston, MA
2 Business Analyst Senior Business Analyst 120,000 Anywhere
3 Data Analyst Data Analyst 105,000 Boston, MA
4 Business Analyst Business Analyst 75,000 Anywhere

invoices_fact

Esta tabla registra facturas asociadas a proyectos, indicando las horas trabajadas y la tarifa por hora.

invoice_id project_id hours_spent hours_rate
101 1 10 50
102 2 20 60
103 1 15 55
104 3 25 65

skills_dim

Contiene el listado de habilidades disponibles, cada una con un identificador único.

skill_id skills
1 SQL
2 Data Analysis
3 Business Analysis

skills_job_dim

Relaciona las habilidades con los trabajos correspondientes, funcionando como una tabla de asociación en un modelo de datos tipo estrella.

skill_id job_id
1 1
2 1
2 3
3 2
3 4

Estas tablas permiten realizar ejercicios prácticos de SQL, tales como consultar el salario promedio de ciertos roles, identificar qué habilidades están asociadas a cada trabajo o calcular el costo total de horas facturadas por proyecto.

Obtener detalles de trabajos para 'Data Analyst' o 'Business Analyst'

Obtener detalles de trabajos para las posiciones de 'Data Analyst' o 'Business Analyst'. Para 'Data Analyst', solo quiero trabajos con salario > $100k, y para 'Business Analyst', solo quiero trabajos con salario > $70k. Incluir solo trabajos ubicados en 'Boston, MA' o 'Anywhere'.

Solución
SELECT
    job_posting_fact.job_title_short,
    job_posting_fact.salary_year_avg,
    job_posting_fact.job_location
FROM
    job_posting_fact
WHERE
    job_location IN ('Boston, MA', 'Anywhere') AND
    (
        (job_title_short = 'Data Analyst' AND salary_year_avg > 100000) OR
        (job_title_short = 'Business Analyst' AND salary_year_avg > 70000)
    );

Buscar roles de analista no senior

Buscar roles de 'Data Analyst' o 'Business Analyst' que no sean senior. Obtener el título del trabajo, la ubicación y el salario promedio anual.

Solución
SELECT
    job_posting_fact.job_title,
    job_posting_fact.job_location,
    job_posting_fact.salary_year_avg
FROM
    job_posting_fact
WHERE
    job_title NOT LIKE '%Senior%' AND
    (job_title LIKE '%Data%' OR job_title LIKE '%Business%') AND
    job_title LIKE '%Analyst%';

Calcular ganancias totales del mes actual por proyecto

Calcular las ganancias totales del mes actual por proyecto. Calcular un escenario donde la tarifa por hora aumenta en $5.

Solución
SELECT
    invoices_fact.project_id AS Proyecto,
    SUM(invoices_fact.hours_spent * invoices_fact.hours_rate) AS Coste_original,
    SUM(invoices_fact.hours_spent * (invoices_fact.hours_rate + 5)) AS Coste_incremento
FROM
    invoices_fact
GROUP BY
    Proyecto
ORDER BY
    project_id;

Encontrar el salario promedio y el número de ofertas de trabajo por habilidad

Encontrar el salario promedio y el número de ofertas de trabajo para cada habilidad.

Solución
SELECT
    skills_dim.skills AS skill_name,
    COUNT(job_postings_fact.job_title) AS number_of_job_posting,
    AVG(job_postings_fact.salary_year_avg) AS average_salary_for_skill
FROM
    skills_dim
LEFT JOIN skills_job_dim ON skills_dim.skill_id = skills_job_dim.skill_id
LEFT JOIN job_postings_fact ON skills_job_dim.job_id = job_postings_fact.job_id
GROUP BY
    skill_name
ORDER BY
    average_salary_for_skill DESC;