Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024
- Código
- ce403644
- Banca
- CESPE / CEBRASPE
- Órgão
- TCE AC
- Ano
- 2024
- Cargo
- ATI ( )

- CCerto
- EErrado

GabaritoC — Certo
Gabarito: Certo. A consulta SQL apresentada está correta: ela cria uma view que agrupa os gastos por município e hospital, calcula a soma dos valores gastos e ordena os resultados de forma decrescente pelo total e, em seguida, pelo nome do município e do hospital. A sintaxe utilizada é válida no padrão SQL, incluindo o uso de GROUP BY 1,2 e ORDER BY 3 desc,1,2, que referenciam as posições das colunas na lista de seleção.
A questão cobra o entendimento de uma consulta SQL que envolve a criação de uma view, junções entre tabelas, agregação de dados e ordenação. Vamos analisar cada parte da consulta para confirmar que ela atende exatamente ao que o enunciado descreve.
Primeiro, a instrução CREATE VIEW total_gastos_por_municipio AS cria uma view chamada total_gastos_por_municipio. Uma view é uma tabela virtual que armazena uma consulta definida pelo usuário. Ela não armazena dados fisicamente (a menos que seja materializada), mas apresenta os resultados da consulta como se fosse uma tabela. No contexto do enunciado, a view é criada para listar os gastos por município e hospital.
A consulta dentro da view faz um SELECT que seleciona as colunas nome_municipio (com alias municipio), nome_hospital (com alias hospital) e a soma de valor_gasto (com alias total). A função SUM(valor_gasto) é uma função de agregação que calcula a soma dos valores gastos. Para que essa função funcione corretamente, é necessário agrupar os resultados por município e hospital, o que é feito pela cláusula GROUP BY 1,2. Os números 1 e 2 referem-se às posições das colunas na lista de seleção, ou seja, municipio (posição 1) e hospital (posição 2). Isso é equivalente a GROUP BY nome_municipio, nome_hospital.
A consulta também faz junções entre as tabelas municipio, hospital e gastos. A junção municipio m JOIN hospital h ON m.id_municipio = h.id_municipio relaciona as tabelas de município e hospital pela chave id_municipio. Em seguida, JOIN gastos g ON h.id_hospital = g.id_hospital relaciona a tabela de hospital com a de gastos pela chave id_hospital. Essas junções garantem que os gastos sejam associados corretamente aos municípios e hospitais.
Por fim, a cláusula ORDER BY 3 desc,1,2 ordena os resultados. O número 3 refere-se à coluna total (posição 3 na lista de seleção), e desc indica ordenação decrescente. Em seguida, ordena por municipio (posição 1) e hospital (posição 2), ambos em ordem crescente (padrão). Isso corresponde exatamente ao que o enunciado descreve: "ordena os resultados, de forma decrescente, pelo maior gasto e, depois, pelo nome do município e do hospital".
Portanto, a consulta está correta e atende a todos os requisitos do enunciado.
A consulta SQL está correta. Ela cria uma view que lista o total de gastos por município e hospital, agrupa os resultados por essas duas colunas, calcula a soma dos valores gastos e ordena os resultados de forma decrescente pelo total e, depois, pelo nome do município e do hospital. A sintaxe é válida no padrão SQL, incluindo o uso de GROUP BY 1,2 e ORDER BY 3 desc,1,2, que referenciam as posições das colunas na lista de seleção.
Gabarito: Certo
Link permanente: /questoes/ce403644