Bases de Datos II

3º2ª DS

Clase 14: Subconsultas: solución y más ejercicios

01/06/2021 — Juanse Marquez

Les comparto la solución a los ejercicios de la semana pasada, y también les propongo nuevos ejercicios sobre el tema de subconsultas.


Primero, les comparto la solución a los ejercicios de la semana pasada. Vuelvo a copiar las consignas para facilitar la lectura. Más abajo, hay ejercicios nuevos.

  1. Mostrar, por cada provincia, el promedio de los precios de venta de las operaciones de tipo “Venta”.
-- Pseudocódigo:
SELECT p.descripcion, AVG(o.precio_venta)
FROM provincias p JOIN operaciones o USING(id_provincia)
WHERE id_tipo_operacion = (
    -- id_tipo operacion para las operaciones de tipo venta.
)
GROUP BY id_provincia;

-- id_tipo operacion para las operaciones de tipo venta:
SELECT id_tipo_operacion FROM tipo_operacion WHERE descripcion LIKE "Venta";

-- Completo:
SELECT p.descripcion, AVG(o.precio_venta)
FROM provincias p JOIN operaciones o USING(id_provincia)
WHERE id_tipo_operacion = (
    -- id_tipo operacion para las operaciones de tipo venta:
    SELECT id_tipo_operacion FROM tipo_operacion WHERE descripcion LIKE "Venta"
)
GROUP BY id_provincia;
  1. Mostrar id, superficie y precio de venta de todas las operaciones de las provincias que tengan más de 600 operaciones.
SELECT id, superficie, precio_venta
FROM operaciones
WHERE id_provincia IN (
    -- Lista de los id de provincia con más de 600 operaciones
);

-- Lista de los id de provincia con más de 600 operaciones
SELECT id_provincia
FROM operaciones
GROUP BY id_provincia HAVING COUNT(*) > 600;

-- Completo:
SELECT id, superficie, precio_venta
FROM operaciones
WHERE id_provincia IN (
    -- Lista de los id de provincia con más de 600 operaciones
    SELECT id_provincia
    FROM operaciones
    GROUP BY id_provincia HAVING COUNT(*) > 600
);
  1. Mostrar id, superficie, precio de venta y fecha de venta de todas las operaciones que correspondan a casas o departamentos.
SELECT id, superficie, precio_venta, fecha_venta
FROM operaciones
WHERE tipo_propiedad IN (
    -- Lista de id_tipo_propiedad de las casas y los departamentos.
);

-- Lista de id_tipo_propiedad de las casas y los departamentos.
SELECT id_tipo_propiedad FROM tipo_propiedad 
WHERE descripcion LIKE "Casa" OR descripcion LIKE "Departamento";

-- Completo:
SELECT id, superficie, precio_venta, fecha_venta
FROM operaciones
WHERE id_tipo_propiedad IN (
    -- Lista de id_tipo_propiedad de las casas y los departamentos.
    SELECT id_tipo_propiedad FROM tipo_propiedad 
    WHERE descripcion LIKE "Casa" OR descripcion LIKE "Departamento"
);
  1. Seleccionar nombre, apellido y fecha de última venta de cada vendedor.
SELECT v.nombre, v.apellido, (
    -- máxima fecha de venta
)
FROM vendedores v;

-- Máxima fecha de venta para un vendedor:
SELECT MAX(o.fecha_venta) FROM operaciones o WHERE o.id_vendedor = X;
-- (donde "X" es el id del vendedor en cuestión).

-- Completo:
SELECT v.nombre, v.apellido, (
    -- máxima fecha de venta
    SELECT MAX(o.fecha_venta) FROM operaciones o
    WHERE o.id_vendedor = v.id_vendedor
) as ultima_venta
FROM vendedores v;

Más ejercicios

  1. Mostrar id, nombre, apellido y fecha de la primera venta de una casa para cada uno de los vendedores.
  2. Mostrar, para cada uno de los vendedores:
    • id, apellido y nombre
    • la cantidad de operaciones a su cargo
    • la cantidad de operaciones a su cargo anteriores al 1º de enero de 2005.
  3. Repetir el ejercicio anterior, pero utilizando JOINS en lugar de subconsultas.
  4. Mostrar id, apellido y nombre de cada vendedor, indicando para cada uno de ellos qué porcentaje de las ventas se realizaron antes de 2005. La propuesta es intentar utilizar como fuente de datos la respuesta al ejercicio anterior, y no la BD original.
  5. Mostrar:
    • id de tipo de propiedad
    • descripción de tipo de propiedad
    • cantidad de operaciones en las que interviene ese tipo de propiedad
    • para todos los tipos de propiedad cuya cantidad de operaciones sea superior a la cantidad de operaciones en las que intervienen las cocheras.

Etiquetas: clases, ejercicios, soluciones