Analista Judiciário - Área Apoio Especializado Especialidade Tecnologia da Informação
Um Analista de um Tribunal Regional do Trabalho foi solicitado a consultar os benefícios concedidos a funcionários de diferentes empresas e apresentar a quantidade total de benefícios pagos por empresa para aquelas que tenham concedido mais de 5 benefícios últimos 12 meses. Utilizando um banco de dados Oracle 19c, aberto e em condições ideais, o comando que faz a consulta é:
ASELECT empresa, COUNT(*) AS total_beneficiosFROM beneficios WHERE data-concessao BETWEEN SYSDATE AND SYSDATE - 365GROUP BY empresaHAVING COUNT(*) > 5;
BSELECT empresa, COUNT(*) AS total-beneficiosFROM beneficiosWHERE data-concessao <= ADD_MONTHS (SYSDATE, -12)GROUP BY empresaHAVING COUNT( ) > 5;
CSELECT empresa, COUNT(*) AStotal_beneficios FROM beneficiosWHERE data-concessao >= ADD_MONTHS (TRUNC(SYSDATE), -12)GROUP BY empresaHAVING COUNT(*) > 5;
DSELECT empresa, COUNT (*) AS total-beneficiosFROM beneficiosWHERE EXTRACT (YEAR FROM data_concessao) := EXTRACT(YEAR FROM SYSDATE) - 1GROUP BY empresaHAVING COUNT(*) > 5;
ESELECT empresa, SUM(beneficio) AS total_beneficiosFROM beneficiosWHERE data_concessao >= ADD_MONTHS (SYSDATE, -12)GROUP BY empresaHAVING SUM (beneficio) > 5;
Revelar gabarito e comentário▾
GabaritoC — SELECT empresa, COUNT(*) AS
total_beneficios FROM beneficios
WHERE data-concessao >= ADD_MONTHS (TRUNC(SYSDATE), -12)
GROUP BY empresa
HAVING COUNT(*) > 5;
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
SQL: Consulta de contagem por grupo com filtro de data no Oracle 19c
Gabarito: letra C. A consulta correta deve contar os benefícios por empresa, filtrar apenas os dos últimos 12 meses usando data_concessao >= ADD_MONTHS(TRUNC(SYSDATE), -12) e restringir a exibição aos grupos com mais de 5 ocorrências através de HAVING COUNT(*) > 5. A alternativa C emprega exatamente essa lógica, com sintaxe válida para Oracle.
A banca testa o conhecimento de funções de data (ADD_MONTHS, TRUNC), agrupamento (GROUP BY) e filtro em grupos (HAVING). O principal ponto de atenção é o uso correto da condição para os "últimos 12 meses" – deve ser >= a data de 12 meses atrás, e não < ou inversões de BETWEEN.
Alternativa A — ❌ Incorreta
A condição WHERE data_concessao BETWEEN SYSDATE AND SYSDATE - 365 está com a ordem invertida em relação à lógica temporal e, no Oracle, BETWEEN exige que o primeiro valor seja menor ou igual ao segundo (SYSDATE - 365 < SYSDATE). Além disso, não utiliza ADD_MONTHS, o que funcionaria para períodos de 365 dias, mas a inversão a torna incorreta.
Alternativa B — ❌ Incorreta
O filtro data_concessao <= ADD_MONTHS(SYSDATE, -12) captura apenas datas anteriores a 12 meses atrás, ou seja, benefícios com mais de 12 meses – exatamente o oposto do desejado. O alias total-beneficios com hífen também é inválido em SQL sem aspas duplas.
Alternativa C — ✅ Correta ⟵ GABARITO
A expressão data_concessao >= ADD_MONTHS(TRUNC(SYSDATE), -12) retorna as datas a partir de 12 meses atrás, incluindo o dia inteiro (devido ao TRUNC). O GROUP BY empresa agrupa as linhas, e HAVING COUNT(*) > 5 filtra os grupos com mais de 5 registros. Alias total_beneficios é válido. Sintaxe correta.
Alternativa D — ❌ Incorreta
O operador := é de atribuição em PL/SQL, não de comparação – deveria ser =. A lógica EXTRACT(YEAR FROM data_concessao) = EXTRACT(YEAR FROM SYSDATE) - 1 considera apenas o ano anterior completo, não os últimos 12 meses corridos. Por exemplo, em janeiro de 2025 excluiria janeiro de 2025, que está dentro do período. Alias total-beneficios com hífen é inválido.
Alternativa E — ❌ Incorreta
A função SUM(beneficio) soma os valores dos benefícios, mas o enunciado pede a quantidade (contagem). Deveria ser COUNT(*) tanto no SELECT quanto no HAVING. A condição de data >= ADD_MONTHS(SYSDATE, -12) sem TRUNC funciona (inclui horário atual), mas o erro conceitual no uso da agregação invalida a consulta.
NÃO CAIA NESSA!
A banca troca a função de agregação (SUM vs COUNT) e inverte o filtro temporal (<= vs >=). Fique atento: "últimos 12 meses" equivale a data a partir de 12 meses atrás, ou seja, >=. E "quantidade" pede COUNT, não SUM.
Conclusão: apenas a alternativa C emprega corretamente a lógica de datas, a contagem e a sintaxe do Oracle.