Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2025
- Código
- qa699071
- Banca
- Quadrix
- Órgão
- CRO SP
- Ano
- 2025
- Cargo
- Ana ( )
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: CERTO (letra C). A cláusula GROUP BY do SQL é exatamente o mecanismo para agrupar linhas que compartilham valores em uma ou mais colunas — como o dentista responsável pelo atendimento — e, combinada com funções de agregação (COUNT, SUM, AVG, MAX, MIN), permite gerar relatórios de produção por profissional. Essa é a função canônica da cláusula, prevista no padrão SQL/ANSI e suportada por MySQL, SQL Server e PostgreSQL.
A linguagem SQL é declarativa: o usuário especifica o que deseja obter, não como o SGBD deve executar. Dentro do comando SELECT, as cláusulas têm papéis bem definidos: WHERE filtra linhas antes do agrupamento; GROUP BY agrupa as linhas sobreviventes pelos valores das colunas indicadas; HAVING filtra grupos após a agregação; e ORDER BY ordena o resultado final. As funções de agregação (COUNT, SUM, AVG, MAX, MIN) resumem várias tuplas em uma única síntese — por exemplo, contar quantos atendimentos cada dentista realizou ou somar o valor produzido por cada um.
No caso da clínica odontológica, imagine uma tabela atendimentos com as colunas id_atendimento, id_dentista, data e valor. Para saber quantos atendimentos cada dentista realizou, a consulta seria:
SELECT id_dentista, COUNT(*) AS total_atendimentos
FROM atendimentos
GROUP BY id_dentista;Para somar o valor produzido por dentista:
SELECT id_dentista, SUM(valor) AS producao_total
FROM atendimentos
GROUP BY id_dentista;A cláusula GROUP BY agrupa todas as linhas com o mesmo id_dentista em um único grupo, e a função de agregação é aplicada a cada grupo, gerando uma linha por dentista no resultado. É exatamente isso que o enunciado descreve: agrupar atendimentos por dentista e aplicar COUNT ou SUM para relatórios de produção.
A distinção que importa aqui é entre WHERE e HAVING: o WHERE filtra linhas individuais antes do agrupamento; o HAVING filtra grupos depois da agregação. Por exemplo, para listar apenas os dentistas com mais de 50 atendimentos, usaríamos HAVING COUNT(*) > 50. Trocar um pelo outro muda o resultado — o WHERE não enxerga totais de grupo, e o HAVING não pode filtrar linhas individuais.
A pegadinha que a banca poderia explorar seria afirmar que o GROUP BY ordena o resultado (isso é papel do ORDER BY) ou que o WHERE pode filtrar grupos (isso é papel do HAVING). Nesta questão, porém, a afirmação é tecnicamente correta e descreve o uso clássico da cláusula.
A banca poderia tentar confundir o candidato trocando o papel do GROUP BY pelo do ORDER BY (que ordena, não agrupa) ou afirmando que o WHERE filtra grupos (o que é função do HAVING). Aqui, porém, a afirmação está correta: GROUP BY agrupa e as funções de agregação resumem os grupos.
Para questões de SQL, memorize a ordem lógica de execução das cláusulas: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. Isso ajuda a saber onde cada filtro se aplica: WHERE antes do agrupamento, HAVING depois.
✅ CERTO. A cláusula GROUP BY é exatamente o mecanismo para agrupar atendimentos por dentista, e as funções COUNT e SUM são as funções de agregação adequadas para gerar relatórios de produção.
Gabarito: letra C
Link permanente: /questoes/qa699071