CREATE VIEW ReportePolideportivos AS
SELECT
c_nombre AS Complejo Deportivo,
c_dirección AS "Localización",
STRING_AGG(d.Nombre, ', ') AS "Deportes",
u_nombre AS Jefe,
c_areaTotal AS area Total (m²),
c_presupuesto AS Presupuesto ($)
FROM
ComplejosDeportivos c
INNER JOIN TiposComplejos tc ON c_idTipo = tc_IdTipo
INNER JOIN Deportes d ON c_IdComplejo = d_IdComplejo
INNER JOIN Usuarios u ON c_IdJefe = u_IdUsuario
WHERE
tc_nombre = 'Polideportivo'
GROUP BY
c_nombre, c_dirección, u_nombre, c_areaTotal, c_presupuesto
ORDER BY
c_nombre;
---Explicación:
--- crear una vista llamada ReportePolideportivos.
--- seleccionar los campos necesarios con alias.
--- unir las tablas ComplejosDeportivos, TiposComplejos, Deportes y Usuarios.
--- filtrar Polideportivo en la columna Nombre de la tabla TiposComplejos.
--- agrupar los campos seleccionados y ordenar alfabéticamente.
CREATE VIEW ReporteUnideportivos AS
SELECT
c_nombre AS Complejo Deportivo,
c_dirección AS Localización,
d_nombre AS Deporte,
u.Nombre AS Jefe,
c_areaTotal AS area Total (m²),
c_presupuesto AS Presupuesto ($)
FROM
ComplejosDeportivos c
INNER JOIN TiposComplejos tc ON c_IdTipo = tc_IdTipo
INNER JOIN Deportes d ON c_IdComplejo = d_IdComplejo
INNER JOIN Usuarios u ON c_IdJefe = u_IdUsuario
WHERE
tc_combre = 'Unideportivo'
AND d_IdComplejo = c_IdComplejo
AND c_IdTipo = 2
GROUP BY
c_nombre, c_dirección, d_nombre, u_nombre, c_areaTotal, c_presupuesto
ORDER BY
c_nombre;
--Explicación:
---crear una vista llamada ReporteUnideportivos.
---seleccionar los campos necesarios con alias.
--- unir las tablas ComplejosDeportivos, TiposComplejos, Deportes y Usuarios.
--- filtrar por Unideportivo y verificar que el deporte corresponda al complejo.
--- agrupar los campos seleccionados y ordenar alfabéticamente.
CREATE VIEW CantidadComplejosPorSede AS
SELECT
s_nombre AS "Sede",
COUNT(c_idComplejo) AS Cantidad de Complejos
FROM
Sedes s
LEFT JOIN ComplejosDeportivos c ON s_idSede = c_idSede
GROUP BY
s_nombre
ORDER BY
"Cantidad de Complejos" DESC;
--Explicación
--crear una vista llamada CantidadComplejosPorSede.
--seleccionar los campos Nombre de la tabla Sedes y el conteo de IdComplejo de la tabla ComplejosDeportivos.
--utilizar LEFT JOIN para unir las tablas Sedes y ComplejosDeportivos por la columna IdSede.
--agrupar por la columna Nombre de la tabla Sedes.
--ordenar descendientemente por la cantidad de complejos.
CREATE VIEW eventos_por_complejo AS
SELECT
c_complejo AS nombre_complejo,
COUNT(e_evento) AS num_eventos
FROM
tabla_eventos e
INNER JOIN tabla_complejos c ON e_complejo_id = c_id
GROUP BY
c_complejo
ORDER BY
num_eventos DESC;
--Explicación
--CREATE VIEW: crea una nueva vista.
--eventos_por_complejo: nombre de la vista.
--SELECT: selecciona los campos que se desean mostrar.
--c.complejo AS nombre_complejo: crea un alias para el campo complejo llamado nombre_complejo.
--COUNT(e.evento) AS num_eventos: cuenta el número de eventos y crea un alias llamado num_eventos.
--FROM: especifica
--INNER JOIN: combina las tablas tabla_eventos y tabla_complejos mediante el campo complejo_id.
--GROUP BY: agrupa los resultados por complejo.
--ORDER BY: ordena los resultados en orden descendente según num_eventos.
CREATE VIEW eventos_enero_2019 AS
SELECT
e_fecha_evento AS fecha,
e_equipamiento AS equipamiento,
e_num_participantes AS participantes,
e_nombre_evento AS evento
FROM
tabla_eventos e
WHERE
e_fecha_evento >= '2019-01-01'
AND e_fecha_evento <= '2019-01-31'
ORDER BY
e_fecha_evento ASC;
--Explicación
--CREATE VIEW: crea una nueva vista.
--eventos_enero_2019: nombre de la vista.
--SELECT: seleccionar los campos que se desean mostrar.
--e.fecha_evento AS fecha: seleccionar la fecha del evento y crear un alias llamado fecha.
--e_equipamiento AS equipamiento: seleccionar el equipamiento y crear un alias llamado equipamiento.
--e_num_participantes AS participantes: seleccionar el número de participantes y crear un alias llamado participantes.
--e_nombre_evento AS evento: seleccionar el nombre del evento y crear un alias llamado evento.
--FROM: especificar la tabla que se utilizará (tabla_eventos).
--WHERE: filtrar los eventos por rango de fechas.
--ORDER BY: ordenar los resultados en orden ascendente según la fecha
CREATE VIEW eventos_por_jueces AS
SELECT
e_fecha_evento AS fecha,
e_complejo AS complejo,
e_equipamiento AS equipamiento,
e_nombre_evento AS evento,
c_nombre_comisario AS juez
FROM
tabla_eventos e
INNER JOIN tabla_comisarios c ON e_id_comisario = c_id_comisario
INNER JOIN tabla_comisarios_tipo ct ON c_id_comisario = ct_id_comisario
WHERE
ct_tipo_comisario = 'Juez'
ORDER BY
e_nombre_evento ASC;
--Explicacion
--Seleccionar los eventos y los comisarios que son jueces.
--unir las tablas tabla_eventos, tabla_comisarios y tabla_comisarios_tipo mediante los campos id_comisario.
--filtrar para mostrar solo los comisarios que son jueces (tipo_comisario = 'Juez').
--ordenar por nombre del evento.
CREATE VIEW eventos_por_jueces AS
SELECT
e_fecha_evento AS fecha,
e_complejo AS complejo,
e_equipamiento AS equipamiento,
e_nombre_evento AS evento,
c_nombre_comisario AS juez
FROM
tabla_eventos e
INNER JOIN tabla_comisarios c ON e_id_comisario = c_id_comisario
INNER JOIN tabla_comisarios_tipo ct ON c_id_comisario = ct_id_comisario
WHERE
ct_tipo_comisario = 'Juez'
ORDER BY
e_nombre_evento ASC;
--Explicacion
--Seleccionar los eventos y los comisarios que son jueces.
--unir las tablas tabla_eventos, tabla_comisarios y tabla_comisarios_tipo mediante los campos id_comisario.
--filtrar para mostrar solo los comisarios que son jueces (tipo_comisario = 'Juez').
--ordenar por nombre del evento.
CREATE VIEW presupuesto_mas_alto_sedes AS
SELECT
s_nombre_sede AS sede,
MAX(s_presupuesto) AS presupuesto_mas_alto
FROM
tabla_sedes s
ORDER BY
s_presupuesto DESC
LIMIT 1;
--Explicacion
--Seleccionar la sede con el presupuesto más alto.
--utilizar la función MAX para obtener el presupuesto más alto.
--ordenar por presupuesto en orden descendente (DESC).
--limitar para mostrar solo un registro (LIMIT 1).