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