FC ConcursosFC Concursos

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.

  1. Na linha 4, é necessário que se substitua o comando WHERE m.situacao = 1 por HAVING m.situacao = 1.
  2. Na linha 1, é necessário que se acrescente DISTINCT na cláusula SELECT.
  3. Na linha 6, é necessário que se utilize o comando COUNT(*) no lugar do comando COUNT(DISTINCT me.id_medico_ esp).
  4. Na linha 3, é necessário que se substitua JOIN por LEFT JOIN com a tabela Medico_Especialidade.
  5. 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

Continue aprendendo