Questão FC688347
Situação hipotética para a questão. No banco de dados do Conselho Regional de Medicina (CRM) de certo estado da federação, há as tabelas Medico, Especialidade, Medico_Especialidade
Linguagem SQL
QUADRIX · 2025
Situação hipotética para a questão.
No banco de dados do Conselho Regional de Medicina (CRM) de certo estado da federação, há as tabelas Medico, Especialidade, Medico_Especialidade e Pagamento. Essas tabelas estão descritas conforme os quadros a seguir.
Tabela Medico
| id_medico |
INT (PK) |
| nome |
VARCHAR (100) |
| cpf |
VARCHAR (11) |
| situacao |
INT |
| numero_registro |
VARCHAR(20) |
| data_registro |
DATE |
Tabela Especialidade
| id_especialidade | INT |
| nome | VARCHAR (50) |
| codigo_cfm | VARCHAR (30) |
Tabela Medico_Especialidade
| id_medico_esp | INT (PK) |
| id_medico | INT (FK) |
| id_especialidade | INT (FK) |
| registro_especial | VARCHAR (20) |
Tabela Pagamento
| id_pagamento | INT (PK) |
| id_medico | INT (FK) |
| data_vencimento | DATE |
| data_pagamento | DATE |
| valor | DECIMAL (10, 2) |
| status | VARCHAR (20) |
| tipo | VARCHAR (30) |
Na tabela Medico, o atributo situacao será do tipo inteiro e o número 0 corresponderá à situação em que o registro está “inativo”, 1, à situação em que o registro está “ativo”, e 2, à situação em que o registro está “suspenso”. Na tabela Especialidade, o atributo codigo_cfm corresponde ao código da especialidade no Conselho Federal de Medicina. Na tabela Medico_Especialidade, o atributo registro_especial corresponde ao número do registro de qualificação de especialista. Na tabela Pagamento, o atributo status pode receber os valores “pago”, “pendente” e “atrasado”, e o atributo tipo pode receber os valores “anuidade”, “multa” e “taxa de registro”.
Ainda com base na situação hipotética anterior e considerando que um analista tenha recebido a demanda de listar todos os médicos com registro ativo que sejam especialistas em mais de uma área. O analista, então, escreveu a seguinte query.
1| SELECT m.id_medico, m.nome
2| FROM Medico m
3| JOIN Medico_Especialidade me ON m.id_medico = me.id_medico
4| WHERE m.situacao = 1
5| GROUP BY m.id_medico, m.nome
6| HAVING COUNT(DISTINCT me.id_medico_esp) > 1;
Com base nessa situação hipotética e considerando‑se que a query escrita pelo analista tenha uma lista que não corresponde ao que foi demandado, assinale a opção que apresenta a mudança que deve ser feita na query, para que ela retorne corretamente o que foi demandado ao analista.
- Na linha 4, é necessário que se substitua o comando WHERE m.situacao = 1 por HAVING m.situacao = 1.
- Na linha 1, é necessário que se acrescente DISTINCT na cláusula SELECT.
- Na linha 6, é necessário que se utilize o comando COUNT(*) no lugar do comando COUNT(DISTINCT me.id_medico_ esp).
- Na linha 3, é necessário que se substitua JOIN por LEFT JOIN com a tabela Medico_Especialidade.
- Na linha 6, é necessário que se substitua o comando COUNT(DISTINCT me.id_medico_esp) por COUNT(DISTINCT me.id_especialidade).
Mostrar resposta e comentário
Gabarito
Errado
Comentário do professor
A alteração indicada substitui COUNT(DISTINCT me.id_medico_esp) por COUNT(DISTINCT me.id_especialidade) na cláusula HAVING, de modo a contar corretamente o número de especialidades distintas de cada médico.
O campo id_medico_esp é a chave primária da tabela de vínculo e identifica cada registro da relação; contar esse campo resulta no número de linhas de vínculo, que pode contar duplicidades ou múltiplos registros para a mesma especialidade.
Já id_especialidade representa a própria especialidade. Ao usar COUNT(DISTINCT me.id_especialidade) garantimos que sejam somadas apenas especialidades diferentes, evitando inflar a contagem por registros repetidos.
Assim a condição correta passa a ser \(HAVING\ COUNT(DISTINCT\ me.id_especialidade)\ >\ 1\), retornando apenas médicos com mais de uma área de especialização, conforme solicitado.
Conteúdo do catálogo FC Concursos · Atualizado em