← Questões de Banco de Dados

Banco de Dados · FGV · 2023

Questão comentada de Banco de Dados

Observe a seguinte consulta SQL, feita no SQLite: SELECT imagem, avg(imagem) OVER (PARTITION BY grau) AS media_grau FROM historico_bijecao; O SQLite dispõe de vários tipos de função. Na consulta acima, a função avg foi usada como uma função do tipo:

Gabarito: C

No SQLite, a mesma função pode mudar de “papel” conforme o jeito que voce a usa na consulta. O segredo aqui esta no trecho OVER (PARTITION BY grau): quando uma funcao aparece com OVER, ela passa a trabalhar como funcao de janela, calculando valores sobre um conjunto de linhas relacionado a cada linha do resultado, sem “sumir” com as demais linhas como numa agregacao comum. Na pratica, a expressao avg(imagem) OVER (PARTITION BY grau) calcula a media de imagem dentro de cada grupo de grau, mas devolve essa media em cada linha do proprio grupo. Ou seja, voce continua vendo todas as linhas de historico_bijecao, e ao lado vem a media daquele grau. Isso e bem diferente da funcao agregada ordinaria, que normalmente resumiria o grupo em uma unica linha por agrupamento. Por isso, o gabarito e C. No sistema de funcoes do SQLite, avg e uma funcao agregada que, quando usada com OVER, atua como window function. A classificacao correta nao e pela natureza “original” da funcao, mas pelo modo de uso na consulta. Em prova, essa sutileza costuma ser a pegadinha favorita da banca. Em resumo: sem OVER, avg costuma ser agregada ordinaria; com OVER, ela vira funcao de janela. E como o enunciado mostrou exatamente essa estrutura, a resposta correta e window.

Continue treinando

Questões relacionadas