Em face das postagens sobre análise com a linguagem SQL e seus recursos, quero mostrar aqui, como podemos aplicar nos nossos resultados de queries análises distributivas com duas funções que o SQL Server nos fornece e que mais uma vez, podem agregar com bons resultados.

FUNÇÕES DISTRIBUTIVAS

Estas funções são facilitadoras para criação das estatísticas em consultas e resultam em uma distribuição dos resultados de acordo com algum padrão ou parâmetro.

As funções de distribuição podem ser: 

  • Rank Distribution –  CUME_DIST e PERCENT_RANK
  • Inverse Distribution – PERCENTILE_CONT e PERCENTILE_DISC

RANK DISTRIBUTION

Primeiro, vamos analisar a query que irá retornar o salário dos funcionários divididos por departamento. Utilizando a função cume_dist vamos identificar quais os salários estão mais próximos do maior. 

Lembrando que a função cume_dist faz uma distribuição acumulada entre 0 e 1 atribuindo aos registros um valor de acordo com o mais próximo do primeiro ele se encontra. 

O maior valor encontrado no grupo será atribuído ao valor de 1 enquanto os outros vão decrescendo de acordo. Veja o exemplo:

Como dito, o maior salário foi atribuído o valor 1 enquanto os outros, de acordo com sua distância ao valor máximo.

Agora com a função de PERCENT_RANK temos que imaginar o seguinte para termos um entendimento:

Imagine  um conjunto de resultados onde o maior é 1 e o menor 0. Quando executamos a query com percent_rank o que estamos buscando é compreender a posição relativa que um determinado registro tem naquele grupo.

Veja  a query abaixo, onde alterei apenas a função. Nesta query, o segundo registro por exemplo é o que possui uma das melhores posições dentro do grupo retornado.

DISTRIBUIÇÃO INVERSA

São funções que se baseiam nas duas funções anteriores e por natureza, retornam valores inversos ao que foi retornado nas funções distributivas.

Como dito anteriormente, temos duas funções que fazem esse papel: 

  • PERCENTILE_DISC
  • PERCENTILE_CONT

A função de percentile_disc é uma espécie de função discreta 

PERCENTILE_DISC

A função de percentile_disc aceita um parâmetro que cria uma espécie de linha que dependendo do valor, pode servir de média entre o conjunto ao qual a função irá atuar.

Por exemplo: se um determinado conjunto for contido por 1, 5, 10, 50 70 e o valor passado no parâmetro é 0.5, temos ai uma média que quando a consulta for executada, retornaria o número 10 como resultado.

Veja o exemplo abaixo, a query executa um percent_disc na tabela de RH baseado nos salários dos funcionário. De acordo com o valor passado como parâmetro na função, ela irá retornar o valor condizente ao parâmetro. 

Por isso esta query retorna o valor de salário 26.443, pois dentro do grupo é o que ‘estaria na casa 0.8 da régua do grupo’ fazendo uma analogia prática para entendimento.

Como a função de percentile_disc é baseada na função de cume_dist, podemos fazer um comparativo até para saber se o resultado de fato, esta correto. Veja o exemplo.

Um fato importante é que dentro do SQL Server e na linguagem T-SQL essa é a única função que aceita a cláusula within group.

PERCENTILE_CONT

Esta função calcula o percentil de um grupo se baseando numa distribuição contínua onde o resultado é interpolar(abre espaço para construção de um novo conjunto de dados discretos e pontuais), e não pode ser igual a nenhum valor específico dentro do resultado da query executada. 

Por exemplo na query executada, quando passamos como parâmetro o valor 0.8 na função percentile_cont, ela assume que entre o 38.4615 e 39.6635, teria o valor obtido na coluna pct_disc_rate que foi 38.7019. 

E porque esta query, assume que seria este valor? pois ela entende que baseado distribuição contínua, seria este o valor que estaria entre os dois que vimos acima.

E para fins de demonstração, podemos utilizar as duas funções em conjunto. Desta vez, apliquei a média na função de percentile_disc. Veja a query:

Os destaques em preto e  vermelho são para reforçar que as duas declarações na query são distintas com seus blocos sendo únicos.

Por fim, finalizo aqui este post onde apresento funções com distribuição de valores para aplicação de análises estatísticas com SQL. Claro que existem outras funções e outras maneiras de realizarem esse tipo de análise e futuramente, pretendo trazer  posts a respeito.

Até o próximo post e saúde!