USE insightplaces;
-- Drop da view caso já exista
DROP VIEW IF EXISTS ocupacao_por_regiao_tempo_avancada;
-- Criação da nova view avançada
CREATE VIEW ocupacao_por_regiao_tempo_avancada AS
SELECT
r.regiao,
YEAR(a.data_inicio) AS ano,
MONTH(a.data_inicio) AS mes,
COUNT(*) AS total_alugueis,
ROUND(AVG(a.preco_total / DATEDIFF(a.data_fim, a.data_inicio)), 2) AS preco_medio_diario,
ROUND(
SUM(DATEDIFF(a.data_fim, a.data_inicio)) /
(COUNT(DISTINCT h.hospedagem_id) * MAX(DAY(LAST_DAY(a.data_inicio)))) * 100,
2
) AS taxa_ocupacao,
CASE
WHEN ROUND(
SUM(DATEDIFF(a.data_fim, a.data_inicio)) /
(COUNT(DISTINCT h.hospedagem_id) * MAX(DAY(LAST_DAY(a.data_inicio)))) * 100, 2
) >= 80 THEN 'Alta demanda'
WHEN ROUND(
SUM(DATEDIFF(a.data_fim, a.data_inicio)) /
(COUNT(DISTINCT h.hospedagem_id) * MAX(DAY(LAST_DAY(a.data_inicio)))) * 100, 2
) >= 50 THEN 'Média demanda'
ELSE 'Baixa demanda'
END AS classificacao_demanda
FROM alugueis a
JOIN hospedagens h ON a.hospedagem_id = h.hospedagem_id
JOIN enderecos e ON h.endereco_id = e.endereco_id
JOIN regioes_geograficas r ON r.estado = e.estado
GROUP BY
r.regiao, YEAR(a.data_inicio), MONTH(a.data_inicio)
ORDER BY
r.regiao, ano, mes;
-- Exemplo de uso:
-- Todos os registros
SELECT * FROM ocupacao_por_regiao_tempo_avancada;
-- Filtrar por região e ano específicos
SELECT *
FROM ocupacao_por_regiao_tempo_avancada
WHERE regiao = 'Sudeste' AND ano = 2023;
Filtra por região, ano, mes, total_alugueis, preço_medio_diario, taxa_ocupacao e Classificação_Demanda