Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] Correção do código da procedure

O código da procedure disponibilizado para copiar é o seguinte:

USE insightplaces;

DROP PROCEDURE IF EXISTS calcular_taxa_ocupacao;

DELIMITER //

CREATE PROCEDURE calcular_taxa_ocupacao(ID VARCHAR(255))
BEGIN
    SELECT
        p.nome AS Proprietario,
        MIN(primeira_data) AS primeira_data,
        SUM(total_dias) AS total_dias,
        SUM(dias_ocupados) AS dias_ocupados,
        ROUND((SUM(dias_ocupados) / SUM(total_dias)) * 100) AS taxa_ocupacao
    FROM(
        SELECT
            hospedagem_id,
            MIN(data_inicio) AS primeira_data,
            SUM(DATEDIFF(data_fim, data_inicio)) AS dias_ocupados,
            DATEDIFF(MAX(data_fim), MIN(data_inicio)) AS total_dias
        FROM
            alugueis
        GROUP BY
            hospedagem_id
        ) tabela_taxa_ocupacao
    JOIN
        hospedagens h ON a.hospedagem_id = h.hospedagem_id  -- Substituir por (hospedagens h ON tabela_taxa_ocupacao.hospedagem_id = h.hospedagem_id)
    JOIN
        enderecos e ON h.endereco_id = e.endereco_id -- Substituir por (proprietarios p ON h.proprietario_id = p.proprietario_id)
    JOIN
        regioes_geograficas r ON e.estado = r.estado -- Excluir esse  JOIN
    WHERE
        r.regiao = "Sudeste" -- Substituir por (p.proprietario_id = ID)
    GROUP BY
        ano, mes -- Substituir por (p.proprietario_id)
    ORDER BY
        ano, mes; -- Substituir por (total_dias DESC;)
END//
DELIMITER;  -- Substituir por (DELIMITER ;)

Realizando os ajustes, código fica igual ao que o instrutor usou no vídeo:

USE insightplaces;

DROP PROCEDURE IF EXISTS calcular_taxa_ocupacao;

DELIMITER //

CREATE PROCEDURE calcular_taxa_ocupacao(ID VARCHAR(255))
BEGIN
    SELECT
        p.nome AS Proprietario,
        MIN(primeira_data) AS primeira_data,
        SUM(total_dias) AS total_dias,
        SUM(dias_ocupados) AS dias_ocupados,
        ROUND((SUM(dias_ocupados) / SUM(total_dias)) * 100) AS taxa_ocupacao
    FROM(
        SELECT
            hospedagem_id,
            MIN(data_inicio) AS primeira_data,
            SUM(DATEDIFF(data_fim, data_inicio)) AS dias_ocupados,
            DATEDIFF(MAX(data_fim), MIN(data_inicio)) AS total_dias
        FROM
            alugueis
        GROUP BY
            hospedagem_id
        ) tabela_taxa_ocupacao
    JOIN
        hospedagens h ON tabela_taxa_ocupacao.hospedagem_id = h.hospedagem_id
    JOIN
        proprietarios p ON h.proprietario_id = p.proprietario_id
     WHERE
       p.proprietario_id = ID
    GROUP BY
        p.proprietario_id
    ORDER BY
        total_dias DESC;
END//
DELIMITER ;

Consegui rodar com esses ajustes!

1 resposta
solução!

Oii, Carlos! Tudo bem?

Agradeço por compartilhar sua sugestão aqui na comunidade do Fórum!

Certamente ela ajudará outros colegas e, também, a Alura ao aplicar melhorias em nossos conteúdos. Continue se dedicando aos estudos, qualquer dúvida, conte conosco.

Abraço!