1
resposta

filtrando informações dos proprietários

A instrutora na aula "filtrando informações dos proprietários" fez o seguinte código:

SELECT p.nome AS nome_proprietario, COUNT(h.hospedagem_id) AS total_hospedagens_ativas FROM proprietarios p JOIN hospedagens h ON p.proprietario_id = h.proprietario_id WHERE h.ativo = 1 GROUP BY p.nome ORDER BY total_hospedagens_ativas DESC LIMIT 10;

Eu achava que o resultado desse código da instrutora deveria ser equivalente ao resultado do seguinte código:

SELECT proprietario_id, COUNT(hospedagem_id) AS qtda FROM hospedagens WHERE ativo = 1 GROUP BY proprietario_id ORDER BY proprietario_id DESC LIMIT 10;

Mas os resultados são diferentes.

No segundo código está retornando na coluna "qtda" SOMENTE valores iguais a 1.

Já no primeiro código, da instrutora, na na coluna "total_hospedagens_ativas" é retornado valores diferentes de 1.

Não estou conseguindo entender porque isso ocorre. Pra mim é claro que a coluna "qtda" do segundo código deveria retornar os mesmos valores da coluna "total_hospedagens_ativas" do código da instrutora.

Na tabela hospedagens existe a coluna proprietario_id. Nesse coluna deveria vir valores repetidos porque o código da instrutora retornou valores repetidos. Mas não vem valores repetidos, porque nada foi retornado após o uso do seguinte código:

SELECT proprietario_id, COUNT() AS repeticoes FROM hospedagens GROUP BY proprietario_id HAVING COUNT() > 1;

A coluna proprietario_id da tabela hospedagens é do tipo VARCHAR, portanto tipo texto. Se tem valores iguais nessa coluna o código que conta esses valores deveria retornar algo, mas não retornou.

É estranho porque quando substitui, através do JOIN, proprietario_id pelo valor contido na coluna nome da tabela proprietarios, verifica-se a existência de nomes repetidos. Isso foi comprovado pelo código da instrutora.

A coluna "qtda" deveria retornar os mesmos valores da coluna "total_hospedagens_ativas", mas não está retornando.

poderiam explicar porque isso está acontecendo?

1 resposta

Oi, Orlando! Tudo bem?

O código da instrutora juntou as tabelas proprietarios e hospedagens usando a coluna proprietario_id. Ele filtra as hospedagens ativas (h.ativo = 1), agrupa pelo nome do proprietário e conta quantas hospedagens ativas cada proprietário tem. O resultado é ordenado em ordem decrescente pelo total de hospedagens ativas e limitado aos 10 primeiros resultados.

Já o seu código está apenas agrupando as hospedagens ativas pela coluna proprietario_id e contando quantas hospedagens ativas cada proprietario_id tem. O resultado é ordenado em ordem decrescente pelo proprietario_id e limitado aos 10 primeiros resultados.

A diferença entre os dois códigos é que o primeiro faz um JOIN com a tabela proprietarios e agrupa pelo nome do proprietário, enquanto o seu apenas agrupa pelo proprietario_id na tabela hospedagens.

Agora, sobre o porquê a coluna qtda no seu código está retornando somente valores iguais a 1, enquanto a coluna total_hospedagens_ativas no primeiro código retorna valores diferentes de 1, é provavelmente pela forma que a consulta foi montada.

Se outra dúvida surgir, estamos disponíveis.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.