Volver a la lista de artículos Artículos
Lectura de 22 minutos

18 Preguntas Prácticas de SQL para Principiantes: Teoría y Ejercicios Prácticos

Tanto si estás empezando como refrescando tus conocimientos de SQL, acompáñanos en estas 18 preguntas de práctica de SQL para principiantes.

SQL, o Lenguaje de Consulta Estructurado, es un lenguaje de programación utilizado para definir, recuperar y manipular datos en bases de datos relacionales. Proporciona una sintaxis intuitiva de sentencias SQL y palabras clave que crean, modifican y consultan bases de datos relacionales.

Este artículo se centra en repasar y practicar los conceptos básicos de SQL. Comenzaremos revisando la sentencia SELECT y sus componentes obligatorios y opcionales para obtener datos de una única tabla. A continuación, profundizaremos en JOINs, que nos permite combinar datos de dos o más tablas. Por último, demostraremos cómo agregar y agrupar datos para realizar análisis más avanzados. Esto puede ayudarte a repasar tus conocimientos de SQL antes de una entrevista o un examen, o simplemente a refrescar y consolidar tus habilidades.

Este artículo muestra ejercicios prácticos de SQL de nuestro curso interactivo. Ejercicios prácticos de SQL interactivo. El curso ofrece más de 80 ejercicios prácticos que cubren diferentes temas de SQL: consultas de tabla única, uniones, agregación y agrupación, subconsultas, etc. Si quieres practicar más por tu cuenta, te animamos a que eches un vistazo a nuestra Ejercicio de SQL cursos.

Todos nuestros cursos prácticos de SQL incluyen ejercicios basados en conjuntos de datos reales, para que pueda practicar SQL en escenarios realistas. Los cursos se agrupan en diferentes temas - por ejemplo, consultas de tabla única, uniones, agregación y agrupación, y subconsultas - para que pueda elegir lo que desea practicar.

Empecemos.

Ejercicio de SQL para principiantes

Los ejercicios prácticos de SQL de este artículo cubren los aspectos básicos de la consulta de datos. Repasaremos:

  • Consultas de una sola tabla - Consulta de datos de una sola tabla utilizando la sentencia SELECT.
  • JOINs - Unir datos de múltiples tablas usando varios JOINs.
  • Agregación y agrupación de datos - Colocación de datos en grupos basados en columnas definidas y compilación de estadísticas.

Consultas de una sola tabla

Comenzaremos revisando los fundamentos de la consulta de datos de una sola tabla y la imposición de condiciones personalizadas en las columnas de datos.

Pregunta 1: Elementos de una Consulta SQL

Pregunta:

Enumere todos los elementos de una consulta SQL.

Respuesta:

La sentencia SELECT consta de los siguientes componentes:

  • SELECT column_name(s) - Define las columnas de datos que se muestran en la salida.
  • FROM table_name - Define la tabla de la base de datos de la que se seleccionan los datos.
  • WHERE column_name = value - Filtra los datos de salida en función de las condiciones establecidas (opcional).
  • GROUP BY column_name(s) - Agrupa los datos basándose en valores distintos (opcional). Si utiliza funciones de agregación, debe utilizar la cláusula GROUP BY.
  • HAVING - Filtra los datos después de que hayan sido procesados por GROUP BY (opcional); puede utilizarlo para imponer condiciones a las funciones de agregación.
  • ORDER BY column_name [ASC | DESC] - Ordena los datos de salida por una columna definida en orden ascendente o descendente (opcional).

Las cláusulas SELECT y FROM son fáciles de entender, ya que SELECT enumera las columnas de datos y FROM define la tabla de datos. En el caso de la cláusula WHERE, existen diversas condiciones que se pueden imponer a las columnas, que revisaremos en la siguiente pregunta.

Puedes leer más sobre los elementos básicos de una consulta en nuestro artículo Enumerar y Explicar Todos los Elementos Básicos de una Consulta SQL.

Conclusiones:

Estos son los elementos de una consulta SQL en orden de aparición: SELECT, FROM, WHERE, GROUP BY, ORDER BY, y HAVING.

Pregunta 2: Filtrado de Datos en una Consulta SQL

Pregunta:

¿Cómo se filtran datos en una consulta SQL utilizando condiciones personalizadas?

Respuesta:

Para imponer condiciones personalizadas en columnas de datos, utilizamos la cláusula WHERE. Por ejemplo, si desea seleccionar personas mayores de 18 años, utilice la cláusula WHERE como se indica a continuación:

SELECT name, age
FROM person
WHERE age > 18;

Las condiciones de la cláusula WHERE suelen implicar comparaciones u operaciones lógicas y dependen del tipo de datos almacenados en la columna.

  • Operadores de comparación utilizados para comparar valores:
    • Tipos de datos numéricos: =, <> or !=, >, <, >=, <=
    • Tipos de datos de texto/cadena: =, <> or !=, LIKE, IN, NOT LIKE, NOT IN
    • Tipos de datos de fecha y hora: =, <> or !=, >, <, >=, <=, BETWEEN, NOT BETWEEN
    • Tipos de datos booleanos: =, <> or !=
  • Operadores utilizados para comprobar valores NULL: IS NULL, IS NOT NULL
  • Operadores lógicos utilizados para combinar múltiples condiciones: AND, OR, NOT

Puede obtener más información sobre el filtrado de datos en nuestros artículos Cómo escribir una cláusula WHERE en SQL y Uso de los operadores AND, OR y NOT en SQL.

Conclusiones:

La cláusula WHERE es usada para filtrar datos imponiendo condiciones en las columnas de datos.

Datos para las Preguntas 3 - 6

En los ejercicios 3 - 6, usaremos la tabla cat tabla. Tiene las siguientes columnas:

  • id - El id de un gato dado.
  • name - El nombre del gato.
  • breed - La raza del gato (por ejemplo, siamés, británico de pelo corto, etc.).
  • coloration - Coloración del gato (calicó, atigrado, etc.).
  • age - Edad del gato.
  • sex - Sexo del gato.
  • fav_toy - El juguete favorito del gato.

Pregunta 3: Seleccionar gatos de una edad y raza determinadas

Pregunta:

Seleccione la identificación y el nombre de cada gato Ragdoll que tenga 1) menos de cinco años, o 2) más de diez años.

Respuesta:

SELECT
  id,
  name
FROM cat
WHERE (age < 5 OR age > 10)
  AND breed = 'Ragdoll';

Explicación:

Como dice la instrucción, seleccionamos las columnas id y nombre de la cat de la tabla.

A continuación, utilizamos la cláusula WHERE para imponer condiciones:

  • En la columna edad:

Queremos seleccionar gatos menores de 5 años (age < 5) o mayores de 10 años (age > 10), así que utilizamos la palabra clave OR y encerramos ambas condiciones entre paréntesis.

¿Por qué necesitamos paréntesis? Queremos imponer esta condición compuesta a la columna de edad. ¿Qué ocurre si no incluimos paréntesis? El paréntesis se impondrá implícitamente sobre las dos últimas condiciones, así: age < 5 OR (age > 10 AND breed = 'Ragdoll'). Esto provocará un resultado incorrecto.

  • En la columna raza:

Queremos seleccionar gatos de la raza Ragdoll; por lo tanto, simplemente definimos la condición como breed = 'Ragdoll'. Tenga en cuenta que los valores de texto en SQL van entre comillas simples (').

Este ejercicio demuestra una condición compuesta que utiliza operadores lógicos (AND, OR) y operadores matemáticos de comparación (<, >, =).

Pregunta 4: Lista de gatos cuyo juguete favorito es una pelota

Pregunta:

Seleccione todos los datos de los gatos cuya raza empiece por "R", cuyo juguete favorito empiece por "pelota" y cuya coloración termine por "m".

Respuesta:

SELECT *
FROM cat
WHERE breed LIKE 'R%'
  AND fav_toy LIKE 'ball%'
  AND coloration LIKE '%m';

Explicación:

Aquí, seleccionamos todas las columnas de datos (*) de la cat tabla.

Queremos imponer condiciones a los valores literales de las columnas breed, colorations, y fav_toy. Para ello, utilizaremos la concordancia de patrones; en SQL, % es un carácter comodín que representa cualquier secuencia de caracteres.

El valor de la columna breed debe empezar por una 'R'. Por lo tanto, utilizaremos un patrón que indique un valor que empiece por 'R' y vaya seguido de cualquier número de caracteres (definido por %). Si queremos imponer una condición de este tipo a un valor literal, debemos utilizar la palabra clave LIKE: breed LIKE 'R%'.

Del mismo modo, queremos que el nombre del juguete favorito empiece por 'pelota'; por lo tanto, la condición es fav_toy LIKE 'ball%'.

Y lo mismo ocurre con la columna coloration. Queremos que el valor literal termine con una 'm', por lo que el carácter % va delante: coloration LIKE '%m'.

Puede leer más sobre el uso del operador LIKE en nuestros artículos ¿Qué hacen los operadores LIKE y NOT LIKE? y Cómo usar LIKE en SQL.

Pregunta 5: Encuentre al Gato Más Aburrido

Pregunta:

Seleccione los nombres de todos los gatos machos que no tienen un juguete favorito - es decir, el valor del campo fav_toy es NULL.

Respuesta:

SELECT name
FROM cat
WHERE sex = 'M'
  AND fav_toy IS NULL;

Explicación:

Como dice la instrucción, seleccionamos la columna nombre de la cat tabla.

Queremos seleccionar sólo gatos machos; por lo tanto, definimos una condición en la columna sex como sex = 'M'. Debe estar familiarizado con los datos almacenados en la tabla cat para definir esta condición, es decir, saber que la columna sexo almacena el valor ‘F’ para las gatas y ‘M’ para los gatos.

Como estamos buscando el gato más aburrido, necesitamos definir una condición que diga que la columna fav_toy no debe tener ningún valor, o ser NULL. Hacemos esto con fav_toy IS NULL.

Trabajar con NULLs es bastante complicado en SQL. Para más detalles, recomendamos los artículos

Pregunta 6: Seleccionar Gatos que Adoran los Juguetes de Broma

Pregunta:

Seleccione el ID, el nombre, la raza y la coloración de todos los gatos que:

  • Son hembras.
  • Les gusten los juguetes provocadores,
  • No sean de raza persa o siamesa.

Respuesta:

SELECT 
  id,
  name,
  breed,
  coloration
FROM cat
WHERE sex = 'F'
  AND fav_toy = 'teaser'
  AND (breed NOT LIKE 'Persian' AND breed NOT LIKE 'Siamese');

Explicación:

En este ejercicio, seleccionamos las columnas id, name, breed, y coloration de la cat tabla. A continuación imponemos las siguientes condiciones:

  • En la columna sex:
    Queremos seleccionar gatos hembra; por lo tanto, la condición es sex = 'F'.
  • En la columna fav_toy:
    Queremos encontrar gatos a los que les gusten los juguetes provocadores, por lo que la condición es fav_toy = 'teaser'.
  • En la columna raza:
    Queremos seleccionar cualquier raza excepto Persa y Siamés. Para ello, utilizamos la palabra clave NOT LIKE y encerramos toda la condición compuesta entre paréntesis (breed NOT LIKE 'Persian' AND breed NOT LIKE 'Siamese').

¡Buen trabajo! Ha completado la sección sobre la selección de datos de una única tabla con varias condiciones de filtro. Pasemos ahora a trabajar con múltiples tablas.

Datos de Varias Tablas: Tipos de JOIN en SQL

Ahora ya sabe cómo seleccionar datos de una sola tabla. Pero, ¿qué pasa si queremos seleccionar datos de dos o más tablas? Necesitamos unir estas tablas basándonos en valores de columnas comunes. Aquí es donde entran en juego las operaciones JOIN.

Pregunta 7: El papel de JOIN

Pregunta:

¿Qué hace JOIN en SQL?

Respuesta:

La cláusula JOIN se utiliza para combinar datos de dos o más tablas.

Puede utilizar tantos JOINs como necesite. A continuación, utilizamos dos JOINs para combinar datos de tres tablas:

SELECT t1.column, t2.column, t3.column
FROM table1 AS t1
JOIN table2 AS t2 ON t1.column = t2.column
JOIN table3 AS t3 ON t1.column = t3.column
...

Al unir tablas, es mejor utilizar nombres de alias para cada tabla (en este caso, t1, t2 y t3). Estos alias se utilizan para referirse a las columnas de cada tabla.

Para obtener más información sobre Tipos de JOIN en SQL, consulte nuestros artículos Explicación de INNER JOIN en palabras sencillas y Cómo unir dos tablas en SQL.

Para llevar:

JOINs se utilizan para combinar datos de varias tablas.

Pregunta 8: Tipos de JOINs

Pregunta:

Enumere todos los tipos de JOINs disponibles en SQL y describa brevemente cada uno.

Respuesta:

Existen cuatro tipos de JOINs: [INNER] JOIN, RIGHT JOIN, LEFT JOIN, y FULL [OUTER] JOIN. Cada uno de ellos proporciona resultados diferentes.

Una JOIN, también conocida como INNER JOIN, es el tipo de unión más común. Sólo devuelve los registros coincidentes de dos o más tablas.

preguntas de práctica de sql

Una LEFT JOIN devuelve todos los registros de la tabla izquierda (primera) y los registros coincidentes de la tabla derecha (segunda). Si no hay coincidencias en la tabla derecha, se incluyen los valores de null en el conjunto de resultados.

preguntas de práctica de sql

Lea ¿Qué es una LEFT JOIN en SQL? para obtener más detalles.

Una RIGHT JOIN devuelve todos los registros de la tabla derecha (segunda) y los registros coincidentes de la tabla izquierda (primera). Si no hay coincidencias en la tabla izquierda, los valores de null se incluyen en el conjunto de resultados.

preguntas de práctica de sql

Un FULL JOIN, también conocido como FULL OUTER JOIN, devuelve todos los registros de las tablas izquierda y derecha. Incluye los registros coincidentes de ambas tablas y utiliza los valores de null para los registros no coincidentes.

preguntas de práctica de sql

Lea este artículo para obtener más información sobre los FULL JOIN.

En resumen, LEFT JOIN y RIGHT JOIN se centran en una tabla como fuente principal de datos, mientras que FULL JOIN combina todos los registros de ambas tablas. La elección de qué JOIN utilizar depende de las necesidades específicas de recuperación de datos y de la relación entre las tablas implicadas.

Para obtener más información sobre los distintos tipos de JOIN, le recomendamos nuestros artículos Tipos de JOIN en SQL y Explicación de los tipos de JOIN en SQL. Nuestra SQL JOIN Cheat Sheet resume la sintaxis de los diferentes tipos de JOINs.

Para llevar:

Los tipos de JOIN incluyen [INNER] JOIN, LEFT JOIN, RIGHT JOIN, y FULL [OUTER] JOIN.

Datos para las Preguntas 9 - 12

En los ejercicios 9 - 12, usaremos el conjunto de datos Museum que consiste en tres tablas.

La tabla artists contiene las siguientes columnas:

  • id - El ID de la base de datos para un artista determinado.
  • name - El nombre del artista.
  • birth_year - Año de nacimiento del artista.
  • death_year - El año en que nació el artista.
  • artistic_field - El campo principal de ese artista (por ejemplo, pintura a la acuarela, escultura, pintura al óleo).

La tabla museum contiene las siguientes columnas:

  • id - El ID de un museo determinado.
  • name - El nombre del museo.
  • country - El país donde se encuentra el museo.

La tabla piece_of_art contiene las siguientes columnas

  • id - El ID de una obra de arte determinada.
  • name - El nombre de la obra.
  • artist_id - ID del artista que creó la obra.
  • museum_id - El ID del museo que tiene esta obra en su colección.

Pregunta 9: Buscar artistas nacidos después de 1800 y el arte que crearon

Pregunta:

Para cada artista que nació después del año 1800 y vivió más de 50 años, muestra su nombre y el nombre de las obras de arte que creó. Renombra las columnas como artist_name y piece_name, respectivamente.

Respuesta:

SELECT
  a.name AS artist_name,
  poa.name AS piece_name
FROM artist a
JOIN piece_of_art poa
  ON a.id = poa.artist_id
WHERE death_year - birth_year > 50
  AND birth_year > 1800;

Explicación:

Seleccionamos los nombres de los artistas (con el alias artist_name) junto con las obras de arte que crearon (con el alias piece_name). Por lo tanto, debemos unir la tabla artist (cuyo alias es a) con la tabla piece_of_art (con el alias poa) en su columna común que almacena los ID de los artistas (ON a.id = poa.artist_id).

Queremos considerar sólo a los artistas que vivieron más de 50 años. Para definir esta condición, utilizaremos las columnas birth_year y death_year de la tabla de artistas como se indica a continuación:

death_year - birth_year > 50

Además, queremos listar los artistas nacidos después de 1800: birth_year > 1800.

Consulte este artículo sobre la unión de dos tablas en SQL para obtener más información.

Pregunta 10: Seleccionar Todas las Obras de Arte y su Ubicación

Pregunta:

Seleccione los nombres de todas las obras de arte junto con los nombres de los museos que las albergan y los países en los que se encuentran dichos museos. Muestre también las obras de arte perdidas (las que no tienen un museo asociado).

Respuesta:

SELECT
  poa.name,
  m.name,
  m.country
FROM piece_of_art poa
LEFT JOIN museum m
  ON poa.museum_id = m.id;

Explicación:

Como queremos seleccionar los nombres de las piezas de arte y los nombres y países de los museos, debemos unir la tabla piece_of_art (alias poa) con la tabla museum tabla (alias m) en la columna ID del museo (ON poa.museum_id = m.id).

Necesitamos mostrar todas las obras de arte, incluidas las perdidas. Tenga en cuenta que las obras de arte perdidas no tienen ningún museo asignado. Por lo tanto, necesitamos un tipo específico de JOIN que seleccione todos los datos de la tabla piece_of_art independientemente de si tiene registros coincidentes en la tabla museum tabla:

FROM piece_of_art poa LEFT JOIN museum m

Este LEFT JOIN asegura que seleccionamos todas las filas de la tabla izquierda (aquí, piece_of_art).

Consulte este artículo sobre LEFT JOIN para obtener más información.

Pregunta 11: Listar todas las obras de arte

Pregunta:

Indique los nombres de todas las obras de arte junto con los nombres de sus creadores y los nombres de los museos que albergan estas obras de arte. Omita las obras perdidas y las obras de arte de autor desconocido. Nombra las columnas nombre_de_la_obra, nombre_del_artista y nombre_del_museo.

Respuesta:

SELECT
  a.name AS artist_name,
  m.name AS museum_name,
  poa.name AS piece_of_art_name
FROM museum m
JOIN piece_of_art poa
  ON m.id = poa.museum_id
JOIN artist a
  ON a.id = poa.artist_id;

Explicación:

Aquí seleccionamos nombres de artistas de la artist nombres de museos de la tabla museum y los nombres de las obras de arte de la piece_of_art tabla. Por lo tanto, debemos unir las tres tablas en sus columnas comunes:

  • Unimos la tabla museum con la tabla piece_of_art en los valores de identificación del museo.
  • Unimos la tabla artist con la tabla piece_of_art tabla de valores de ID de artista.

Una vez unidas las tres tablas, podemos seleccionar los valores de salida.

Tenga en cuenta que queremos omitir las obras de arte que no tengan asignado ningún museo ni ningún artista. Por lo tanto, utilizamos el estándar JOIN (o INNER JOIN) que une datos de tablas sólo cuando hay una coincidencia en la columna sobre la que se realiza la JOIN.

Siga este artículo sobre cómo unir 3 o más tablas para obtener más información.

Pregunta 12: Enumere obras de arte creadas por artistas desconocidos

Pregunta:

Compruebe si alguna obra fue creada por artistas desconocidos. Indique los nombres de estas piezas junto con los nombres de los museos que las albergan.

Respuesta:

SELECT
  poa.name,
  m.name
FROM piece_of_art poa
JOIN museum m
  ON poa.museum_id = m.id
WHERE poa.artist_id IS NULL;

Explicación:

Queremos mostrar los nombres de las piezas de "artistas desconocidos" junto con los nombres de los museos que las albergan. Para ello, unimos la tabla piece_of_art (alias poa) con la tabla museum (alias m) en la columna ID del museo (ON poa.museum_id = m.id).

Como buscamos obras de arte creadas por artistas desconocidos, incluimos la siguiente condición en la cláusula WHERE: poa.artist_id IS NULL.

Agrupación y agregación de datos

La agregación y la agrupación son técnicas utilizadas para organizar los datos en grupos basados en criterios definidos y realizar cálculos sobre los grupos.

Pregunta 13: Funciones de agregación y función de GROUP BY

Pregunta:

Enumere las funciones de agregación disponibles y explique el papel de la cláusula GROUP BY.

Respuesta:

La agregación consiste en aplicar operaciones matemáticas a un conjunto de valores de una columna. Las funciones de agregación más utilizadas son SUM(), AVG(), COUNT(), MAX() y MIN().

Por ejemplo, imagine una tabla que almacena valores de ventas mensuales:

yearmonthsales
2022115
2022124
202313
202326
202336
202344
202355

Puede utilizar la función de agregado SUM() para obtener el total de ventas, así:

SELECT SUM(sales) AS total_sales
FROM sales_table;

La salida es la siguiente:

total_sales
33

Cuando estamos agregando datos, a menudo también segmentamos los datos en grupos basados en valores distintos en la columna que se utiliza para agrupar los datos.

La agrupación implica la creación de grupos de datos basados en valores de columna(s) dados como argumentos a la cláusula GROUP BY.

Por ejemplo, imagine que desea seleccionar las ventas por año. Para ello, debe agrupar los datos por el año, de la siguiente manera:

SELECT year, SUM(sales) AS year_sales
FROM sales_table
GROUP BY year;

El resultado es el siguiente:

yearyear_sales
20229
202324

Si la columna en la que agrupamos los datos tiene cinco valores distintos, los datos se agruparán en cinco grupos.

Te recomendamos este artículo si quieres aprender más sobre la cláusula GROUP BY.

Conclusiones:

La agregación consiste en realizar cálculos sobre un conjunto de valores y la agrupación consiste en organizar los datos en grupos en función de criterios específicos.

Pregunta 14: WHERE vs. HAVING

Pregunta:

¿Cuál es la diferencia entre WHERE y HAVING?

Respuesta:

Tanto WHERE como HAVING se utilizan para filtrar datos imponiendo determinadas condiciones.

La diferencia es que WHERE se utiliza para imponer condiciones en columnas de datos (como has visto en la sección Consultas de una sola tabla ) y HAVING se utiliza para imponer condiciones en funciones agregadas (como verás en esta sección).

Lea este artículo sobre WHERE vs. HAVING para obtener más información sobre las diferencias entre estas dos cláusulas.

Conclusiones:

WHERE impone condiciones en columnas. HAVING impone condiciones en funciones agregadas.

Datos para las Preguntas 15 - 18

En los ejercicios 15 - 18, usaremos la tabla games tabla. Consta de las siguientes columnas:

  • id - El ID de un juego dado.
  • title - El nombre del juego (por ejemplo, "Super Mario Bros").
  • company - El nombre de la empresa que fabrica el juego (por ejemplo, Nintendo).
  • type - El tipo de juego (por ejemplo, "arcade").
  • production_year - El año de creación del juego.
  • system - El sistema para el que se lanzó el juego (por ejemplo, "NES").
  • production_cost - El coste de producción del juego.
  • revenue - Los ingresos generados por el juego.
  • rating - La calificación otorgada al juego.

Pregunta 15: Calcular el coste medio de producción de buenos juegos

Pregunta:

Muestre el coste medio de producción de los juegos que se produjeron entre 2010 y 2015 y recibieron una puntuación superior a 7.

Respuesta:

SELECT 
  AVG(production_cost)
FROM games
WHERE production_year BETWEEN 2010 AND 2015
  AND rating > 7;

Explicación:

Para seleccionar el coste medio de producción de los juegos, utilizamos la función agregada AVG() en la columna production_cost. Esta función toma todos los valores presentes en la columna production_cost y calcula la media.

Como nos interesan los juegos producidos entre 2010 y 2015, debemos incluir esta condición en la cláusula WHERE: production_year BETWEEN 2010 AND 2015. ¡Eso suena a inglés sencillo!

Además, queremos incluir sólo los juegos con una puntuación superior a 7, así que añadimos otra condición en la cláusula WHERE: AND rating > 7.

Consulte este artículo sobre la función AVG() para ver más ejemplos.

Pregunta 16: Proporcionar estadísticas de producción de juegos por año

Pregunta:

Para cada año:

  • Muestre el año (production_year).
  • Cuente el número de juegos lanzados en este año (nombre este recuento).
  • Indique el coste medio de producción (como avg_cost) de estos juegos.
  • Muestra los ingresos medios (como avg_revenue) de estos juegos.

Respuesta:

SELECT
  production_year,
  COUNT(*) AS count,
  AVG(production_cost) AS avg_cost,
  AVG(revenue) AS avg_revenue
FROM games
GROUP BY production_year;

Explicación:

Queremos mostrar diferentes estadísticas por año; por lo tanto, necesitamos GROUP BY production_year.

Al seleccionar de la tabla games utilizamos la función agregada COUNT() para contar los juegos publicados por año. Usamos * como argumento porque queremos contar todas las filas (no los valores de una columna específica). Le ponemos el alias AS count.

A continuación, queremos mostrar el coste medio de producción: AVG(coste_producción). Lo llamamos AS avg_cost.

Por último, mostramos los ingresos medios: AVG(ingresos). Lo llamamos avg_ingresos.

Pregunta 17: Calcular el beneficio bruto por empresa

Pregunta:

Para todas las empresas presentes en la games tabla, indique su nombre y su beneficio bruto en todos los años. Para simplificar este problema, suponga que el beneficio bruto es igual a los ingresos menos el coste de producción de todos los juegos; denomine a esta columna suma_beneficio_bruto. Ordena los resultados de forma que la empresa con mayor beneficio bruto sea la primera.

Respuesta:

SELECT
  company,
  SUM(revenue - production_cost) AS gross_profit_sum
FROM games
GROUP BY 1
ORDER BY 2 DESC;

Explicación:

Seleccionamos la columna company de la games tabla. Para cada empresa, sumamos los valores de beneficio bruto (revenue - production_cost) producidos por cada juego creado por esta empresa.

Como queremos ver la suma del beneficio bruto por empresa, debemos GROUP BY empresa. Sin embargo, en este caso, utilizamos una sintaxis diferente: GROUP BY 1, lo que significa que queremos GROUP BY la columna listada en SELECT.

Por último, ordenamos el resultado en orden descendente en función de los valores de beneficio bruto por empresa.

Pregunta 18: Identificar buenos juegos

Pregunta:

Nos interesan los buenos juegos producidos entre 2000 y 2009. Un buen juego tiene una puntuación superior a 6 y fue rentable. Para cada empresa, muestre:

  • El nombre de la empresa.
  • Los ingresos totales de los juegos buenos producidos entre 2000 y 2009 (como columna revenue_sum ).
  • El número de juegos buenos que la empresa produjo en este periodo (como columna número_de_juegos ).

Importante: Sólo se muestran las empresas con ingresos por juegos buenos superiores a 4.000.000.

Respuesta:

SELECT
  company,
  COUNT(company) AS number_of_games,
  SUM(revenue) AS revenue_sum
FROM games
WHERE production_year BETWEEN 2000 AND 2009
  AND rating > 6
  AND revenue - production_cost > 0
GROUP BY company
HAVING SUM(revenue) > 4000000;

Explicación:

Ésta es un poco más complicada, ya que tenemos que crear una consulta que utilice WHERE, HAVING, funciones de agregación y agrupación.

Analicemos las instrucciones paso a paso y traduzcámoslas a código SQL.

WHERE-instrucciones relacionadas:

  • los juegosproducidos entre 2000 y 2009 dan como resultado que se añada esta condición a la cláusula WHERE:
    WHERE production_year BETWEEN 2000 AND 2009
  • juegoscon una puntuación superior a 6 : esta condición se añade a la cláusula WHERE:
    AND rating > 6
  • juegosrentables : esta condición se añade a la cláusula WHERE:
    AND revenue - production_cost > 0
    Recuerda, un juego rentable significa que los ingresos son superiores al coste de producción.

SELECT-instrucciones relacionadas:

  • mostrar elnombre de la empresa hace que se añada esta columna a la sentencia SELECT:
    SELECT company
  • mostrarsus ingresos totales (como revenue_sum) hace que esta columna se añada a la sentencia SELECT:
    SUM(revenue) AS revenue_sum
  • mostrarel número de juegos buenos (number_of_games) hace que esta columna se añada a la declaración SELECT:
    COUNT(company) AS number_of_games

GROUP BY- and HAVING-instrucciones relacionadas:

  • para cada empresa significa que calculamos las estadísticas (COUNT() y SUM()) sobre una empresa Por lo tanto, debemos agrupar los datos por empresa:
    GROUP BY company
  • mostrar las empresas con ingresos por buen juego superiores a 4.000.000 hace que se añada esta condición a la cláusula HAVING:
    HAVING SUM(revenue) > 4000000

Así es como hemos diseccionado las instrucciones y las hemos traducido a código SQL.

Más información básica Ejercicio de SQL

Este artículo cubrió los aspectos básicos de las consultas SQL, incluyendo cómo filtrar datos, unir múltiples tablas, ordenar y clasificar resultados, y agregar y agrupar datos.

¿Te han gustado los ejercicios prácticos de SQL hasta ahora? Todos estos ejercicios provienen de nuestro Ejercicios prácticos de SQL curso. Para más ejercicios de SQL, echa un vistazo a estos cursos prácticos de LearnSQL.es:

Puedes comprar cada uno de estos cursos individualmente, o puedes comprar nuestro paquete Todo, para siempre SQL. Cubre los más de 70 cursos de SQL ofrecidos en nuestra plataforma, incluyendo estos cursos de práctica, y todos los nuevos cursos que añadiremos en el futuro.

Y recuerda, la práctica hace al maestro. ¡Buena suerte en tu viaje SQL!