Saltar al contenido principal

Ejercicios básicos de SQL

Tabla de ejemplo

job_posting_fact

job_idjob_title_shortjob_titlesalary_year_avgjob_location
1Data AnalystJunior Data Analyst95,000Boston, MA
2Business AnalystSenior Business Analyst120,000Anywhere
3Data AnalystData Analyst105,000Boston, MA
4Business AnalystBusiness Analyst75,000Anywhere

invoices_fact

invoice_idproject_idhours_spenthours_rate
10111050
10222060
10311555
10432565

skills_dim

skill_idskills
1SQL
2Data Analysis
3Business Analysis

skills_job_dim

skill_idjob_id
11
21
23
32
34

Ejercicio 1: Obtener detalles de trabajos para 'Data Analyst' o 'Business Analyst'

Enunciado

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)
);

Ejercicio 2: Buscar roles de analista no senior

Enunciado

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%';

Ejercicio 3: Calcular ganancias totales del mes actual por proyecto

Enunciado

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;

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

Enunciado

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;