João tem pouca experiência com SQL, mas precisa de uma cons...
Dado que a resposta correta deve exibir somente o competidor B, conclui-se que:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
A primeira query está errada pois aquele HAVING na verdade não está filtrando nada.
having count(distinct d.azul) = count(distinct d.verde), como existem 4 registros diferentes na coluna d.azul e 4 registros diferentes na d.verde, essa condição é a mesma coisa que having 4 = 4, logo todas as linhas serão retornadas pois todas vão atender essa condição.
Já a terceira query tá com erro de sintaxe naquele subselect.
select sum(1) where d.azul = c.nome
A segunda query está certinha, ela só retorna o registro se o número de vezes que ele apareceu em d.azul for igual ao numero de vezes que ele apareceu em d.verde
Então letra C é a alternativa certa.
Não manjo muito de linguagem SQL marquei a primeira por causa do count e imaginei que ele queria contar
O que acontece é que quando temos uma query como FROM Competidor c, Disputa d, ao invés de fazer a contagem nas linha de Competidor apenas, ele faz a contagem no produto cartesiano das duas tabelas. Isso gera um resultado em que se contam 6 vezes diferentes o mesmo resultado (o número de linhas de disputa), resultando em número muito acima do que teríamos usando apenas FROM Competidor c
Para determinar qual dos scripts fornecidos produz o resultado correto (apenas o competidor B), precisamos analisar cada um deles com base nas tabelas fornecidas:
O primeiro script tenta agrupar e contar as disputas por competidor, mas a sintaxe está incorreta porque falta uma condição de junção entre as tabelas Competidor e Disputa. Além disso, o uso de distinct nas colunas de disputa não é aplicado corretamente para verificar se um competidor tem o mesmo número de vezes como azul e verde.
O segundo script usa subconsultas para contar as ocorrências de cada competidor como azul e como verde, comparando esses valores. Este é um método válido para alcançar o resultado desejado, assumindo que o ambiente SQL permita comparações entre subconsultas sem especificar uma função de agregação explícita.
O terceiro script é semelhante ao segundo, mas está incorreto porque não possui a cláusula FROM nas subconsultas, tornando a sintaxe inválida.
Portanto, a resposta correta é que somente o segundo script funciona.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo