Calculando Média, Moda e Mediana no Oracle

Veja neste artigo como a linguagem SQL pode ser utilizada para que possamos realizar o cálculo dos valores da moda, média e mediana de variáveis armazenadas em tabelas do banco de dados relacionais.

Introdução

As medidas de tendência central são muito utilizadas em estudos de Probabilidade e Estatística para que seja possível representar em um único número, o que é típico (ou médio) em um conjunto de dados. Para que possamos começar a introduzir essas medidas, faremos uso da tabela “CAMPEONATO”, cujos dados são apresentados na Figura 1. Esta tabela mostra as infrações cometidas e punições atribuídas para diversos jogadores (a punição é dada em número de jogos) que foram expulsos em partidas do “campeonato de futebol A”. Observe que os jogadores “Wesley” e “Joel” foram expulsos mais de uma vez durante o campeonato.

Figura 1: Tabela “Campeonato”.

Moda

A moda é a medida de tendência central que consiste no valor mais frequente em uma distribuição. Para obter a moda da variável PUNICAO no SQL do Oracle, basta utilizar a função STATS_MODE<, como mostra a Listagem 1. O resultado é 4, pois, a maioria das punições (3 casos) foi de 4 jogos para os jogadores expulsos.

Listagem 1: Obtenção da MODA com a função STATS_MODE.
SELECT STATS_MODE(punicao) FROM campeonato STATS_MODE(punicao) 4

Média

A média é uma medida bem conhecida por todos nós. Trata-se da soma de cada valor do conjunto de registros, dividida pelo número de registros. Em SQL, a função para o cálculo da média é AVG (Listagem 2). Em nosso exemplo, os jogadores foram, em média, punidos por 3 jogos. Veja que ao contrário da moda, a média nem sempre o valor que ocorre com maior frequência no conjunto de dados.

Para ficar mais claro, a média foi calculada da seguinte forma: (4+1+3+2+4+4+3)/7 = 21/7 = 3. Onde 7 é a quantidade de registros total.

Listagem 2: Obtenção da MÉDIA com a função AVG.
SELECT AVG(punicao) FROM campeonato AVG(punicao) 3

Mediana

A ideia da mediana é separar a distribuição em duas partes iguais. Para calcular essa medida, inicialmente os dados devem ser ordenados. A mediana corresponderá ao ponto do meio da distribuição. Em nosso exemplo, se ordenarmos as punições de forma ascendente, teremos o seguinte conjunto de valores: 1, 2, 3, 3, 4, 4, 4. Nesse caso, o valor 3 é a mediana, pois é ele quem separa a distribuição em duas partes (1, 2, 3 e 4 , 4, 4). No SGBD Oracle, a função MEDIAN (disponível a partir do Oracle 10) é responsável por realizar o cálculo da mediana (Listagem 3).

Listagem 3: Obtenção da MEDIANA com a função MEDIAN.
SELECT MEDIAN(punicao) FROM campeonato MEDIAN(punicao) 3

Utilizando a cláusula GROUP BY

É possível utilizar a cláusula GROUP BY para obter os valores das medidas agrupados por tipo de infração, como mostra a Listagem 4. Os resultados são apresentados na Figura 2, logo em seguida.

Com os dados expostos dessa forma, poderia ser feita uma análise estatística a cerca de todo um campeonato e a partir de então se providenciar medidas de prevenção e correção, por exemplo. São inúmeros os contextos em que esse levantamento de informações é relevante.

Listagem 4: Utilizando a cláusula GROUP BY.
SELECT infracao, STATS_MODE(punicao) AS MODA, AVG(punicao) AS MEDIA, MEDIAN(punicao) AS MEDIANA FROM campeonato GROUP BY infracao
Figura 2: Resultado do SELECT com GROUP BY (Moda, Média e Mediana por tipo de infração)

Algumas observações importantes:

Inicialmente, é preciso explicar porque a mediana da infração “RECLAMACAO” tem valor 1,5. O que ocorre, é que, em nosso conjunto de dados exemplo, temos dois registros associados à punição por reclamação. Um dos atletas foi punido com 1 jogo e o outro com 2. Sendo assim, existe o seguinte conjunto de dados ordenados para o cálculo da mediana: 1 e 2. Como o número de registros é par, não há como selecionar um valor do meio. Então a mediana precisa ficar no meio do caminho entre 1 e 2, ou seja, ela deve ser obtida pelo cálculo da média entre esses dois valores: (1 + 2) / 2 = 1,5. Em resumo: sempre que tivermos um número par de registros, a mediana será a média entre os dois valores do meio do conjunto ordenado de dados.

Outra observação importante diz respeito à moda da infração “RECLAMACAO”. Na realidade, neste caso existem dois valores para a moda: 1 e 2 (trata-se de uma distribuição bimodal), pois ambos aparecem com a mesma frequência no conjunto. No entanto, a função STATS_MODE não trata casos onde exista mais de uma moda. Segundo a documentação do Oracle, “sempre que houver mais de uma moda, o Oracle escolherá um valor e retornará apenas o valor escolhido”.

Para maiores informações sobre as funções apresentadas neste artigo, consulte o manual “Oracle Database SQL Reference”, no capítulo sobre funções SQL.

Espero que o conteúdo aqui apresentado possa ser útil para aqueles que necessitarem, em algum momento, trabalhar com essas relações matemáticas. Como vimos, com o uso do Oracle, os cálculos diretamente na aplicação são dispensados.

Confira também

Artigos relacionados