Está en la página 1de 3

TRABAJO 3

Consultas con funciones de grupos.

1. Calcular la capacidad total de trenes en ambas categorías de reparación (Si, No).

SELECT Reparacion, SUM(Capacidad_tren) as Capacidad_Total


FROM Tren
GROUP BY Reparacion

Dialogo:
Lo que queremos saber es la capacidad total de trenes que existe en ambas categorías de reparación (Si, No),
para esto:
▪ Se utiliza la función de agregación SUM para sumar la capacidad de los trenes.
▪ También la función GROUP BY que agrupa los resultados por la categoría de reparación correspondiente
(Si o No).
▪ Y el resultado es la capacidad total de trenes para cada categoría, que es...

2. Obtener la fecha mínima y máxima de las reservas por estacionamiento realizadas en el mes de enero.

SELECT ID_estacionamiento, MIN(Fecha_inicio), MAX(Fecha_final)


FROM Reserva
WHERE EXTRACT(MONTH FROM Fecha_inicio) = 1 AND EXTRACT(MONTH FROM Fecha_final) = 1
GROUP BY ID_estacionamiento

Dialogo:
En la segundo consulta, se desea obtener la fecha mínima y máxima de las reservas por estacionamiento
realizadas sólo en el mes de enero, para esto:
▪ Utilizamos las funciones de agregación MIN y MAX para encontrar las fechas mínimas y máximas.
▪ Se utiliza WHERE para condicionar la consulta y así filtrar las reservas realizadas en el mes de enero.
▪ Por último, se agrupa por ID del estacionamiento para obtener los resultados por estacionamiento.

3. Calcular la capacidad promedio de trenes en reparación por línea y ordenar el promedio de forma
descendente.

SELECT l.Nombre_linea, ROUND(AVG(tr.Capacidad_tren)) AS Promedio


FROM Linea l JOIN Tren tr ON (l.ID_linea = tr.ID_linea)
WHERE tr.Reparacion = 'Si'
GROUP BY l.Nombre_linea
ORDER BY AVG(tr.Capacidad_tren) DESC

Dialogo:
Como tercera consulta, lo que queremos es calcular la capacidad promedio de trenes en reparación por línea
y ordenar el promedio de forma descendente:
▪ Aquí utilizamos la función ROUND para redondear el promedio a un número entero y sin decimales.
▪ Usamos WHERE para filtrar los trenes en reparación (Si).
▪ Con GROUP BY agrupamos por el nombre de la línea.
▪ Y con ORDER BY ordenamos los resultados de forma descendente según el promedio de capacidad.

4. Obtener la fecha de inicio más temprana y la fecha final más tardía de las reservas por línea realizadas
durante el año 2023.

SELECT l.Nombre_linea, MIN(r.Fecha_inicio), MAX(r.Fecha_final)


FROM Linea l JOIN Tren tr ON (tr.ID_linea = l.ID_linea)
JOIN Reserva r ON (tr.ID_tren = r.ID_tren)
GROUP BY l.Nombre_linea
HAVING MIN(r.Fecha_inicio) <'01/01/2024'

Dialogo:
La cuarta consulta es para obtener la fecha de inicio más temprana y la fecha final más tardía de las reservas
por línea realizadas durante el año 2023:
▪ Se utiliza la función de agregación MIN para obtener la fecha de inicio más temprana y MAX para la fecha
final.
▪ Se agrupa por el nombre de la línea con GROUP BY.
▪ Y se filtran las reservas realizadas durante el año 2023 mediante la función HAVING.

5. Calcular la cantidad de trenes que tienen una capacidad superior a 206 por línea.

SELECT l.Nombre_linea, COUNT(tr.ID_tren)


FROM Linea l JOIN Tren tr ON (l.ID_linea = tr.ID_linea)
WHERE tr.Capacidad_tren > 206
GROUP BY l.Nombre_linea

Dialogo:
Y para la última consulta con funcione de grupo, lo que deseamos es calcular la cantidad de trenes que
tienen una capacidad superior a 206 por línea:
▪ Se utiliza la función de agregación COUNT para contar la cantidad de trenes.
▪ La función WHERE que filtra los trenes con capacidad superior a 206.
▪ Y finalmente la función GROUP BY para agrupar por el nombre de la línea.

Vistas Simples

1. Crear una vista que muestre la cantidad de trenes por línea:

CREATE VIEW Vista_TrenesPorLinea AS


SELECT l.Nombre_linea, COUNT(t.ID_tren) as Cantidad_Trenes
FROM Linea l
JOIN Tren t ON l.ID_linea = t.ID_linea
GROUP BY l.Nombre_linea;

2. Crear una vista que muestre la capacidad promedio de estacionamientos por tipo de estación.

CREATE VIEW Vista_PromedioCapacidadPorTipo AS


SELECT Tipo_estacion, AVG(Capacidad_estacionamiento) as Promedio_Capacidad
FROM Estacionamiento e
JOIN Dispone d ON e.ID_estacionamiento = d.ID_estacionamiento
JOIN Estacion es ON d.ID_estacion = es.ID_estacion
GROUP BY Tipo_estacion;

Vistas Complejas

1. Crear una vista que muestre el detalle de las reservas con información de estación y tren.

CREATE VIEW Vista_ReservasDetalle AS


(SELECT r.Fecha_inicio, r.Fecha_final, e.Nombre_estacion, tr.Capacidad_tren
FROM Reserva r
JOIN Estacionamiento es ON r.ID_estacionamiento=es.ID_estacionamiento
JOIN Dispone d ON r.ID_estacionamiento=d.ID_estacionamiento
JOIN Estacion e ON d.ID_estacion=e.ID_estacion
JOIN Tren tr ON r.ID_tren=tr.ID_tren);

2. Crear una vista que muestre la disponibilidad de estacionamientos por estación y fecha

CREATE VIEW Vista_DisponibilidadEstacionamientos AS


(SELECT e.ID_estacion, e.Nombre_estacion, d.ID_estacionamiento, es.Capacidad_estacionamiento -
COUNT(r.ID_estacionamiento) as Estacionamientos_Disponibles
FROM Estacion e
JOIN Dispone d ON e.ID_estacion = d.ID_estacion
JOIN Estacionamiento es ON d.ID_estacionamiento = es.ID_estacionamiento
LEFT JOIN Reserva r ON es.ID_estacionamiento = r.ID_estacionamiento
GROUP BY e.ID_estacion, e.Nombre_estacion, d.ID_estacionamiento, es.Capacidad_estacionamiento);

También podría gustarte