Calculando a média de um conjunto é mais desafiador do que simplesmente calcular a média ou média de um conjunto. Adicionar na sintaxe e da complexidade do SQL ea tarefa pode parecer insuperáveis em primeiro lugar. Mas com alguns conceitos simples e alguns exemplos, o cálculo do valor médio é nenhum suor. Este how-to irá usar Transact-SQL para os seus exemplos.
Coisas que você precisa
- Um banco de dados capaz de executar Transact-SQL (Microsoft SQL Server, Sybase SQL Anywhere, etc.)
Encontrar a mediana
Entenda a diferença entre a mediana ea média de um conjunto. A mediana é o "valor médio" de um conjunto, enquanto que a média é a média de todos os elementos de um conjunto. Por exemplo, dado um conjunto ordenado de números {1, 2, 6, 9, 10, 11}, a mediana será de 7,5 ([6 + 9] / 2), mas a média é de 6,5 ([1 + 2 + 6 + 9 + 10 + 11] / 6).
Para o cálculo da média, contar o número de elementos do conjunto. Se a contagem é ainda, tomar a média do elemento na posição para ser encontrado pela contagem dos elementos totais e dividindo por dois e a posição encontrada dividindo o número total de elementos por 2 e adicionando uma. Se a contagem for ímpar, tomar o elemento na posição marcada pela contagem total dividido por dois e arredondado para o número inteiro mais próximo.
Criar um conjunto ordenado de números com um novo índice integral. Por exemplo, se os dados numéricos é armazenado no "num" coluna do "dados" tabela, crie uma nova tabela temporária que contém o "num" valor, com um novo índice:
CRIAR #values mesa (
ID int não a identidade NULL (1,1),
Num numérico (9,4)
)INSERT INTO #values (num)
Num SELECIONAR
A partir de dados
ORDER BY numA instrução ORDER BY é muito importante para o cálculo da mediana.
Selecione os dados da tabela temporária onde o ID é igual a metade da contagem de registros na tabela. Se houver um número ímpar de registros, tomar a média dos dois valores como a média final. Isto pode ser conseguido na única consulta abaixo:
SELECIONAR AVERAGE (num)
DE #values v
JUNTE-SE (
SELECT COUNT (*) AS cnt
DE #values _v
) C ON (
c.ID = TETO (_v.cnt / 2.0)
E (_v.cnt% 2 = 1 - cnt é estranho
OU (
_v.cnt% 2 = 0 - cnt é ainda
E c.ID = (_v.cnt / 2.0) + 1
))
)Esta consulta usa uma subconsulta para encontrar a contagem de registros para que o valor médio pode ser determinado. Em ambos os casos de um mesmo contar e uma contagem de estranho, o uso de teto para arredondar para cima (_v.cnt / 2.0) é preciso. (Por exemplo, Even: 6/2 = 3 Odd: 02/07 = 3,5, que é arredondado para 4) Além disso, quando a contagem é ainda, adicionar 1 a (_v.cnt / 2.0) para obter o segundo elemento a incluir na mediana final.
dicas & avisos
- Se você estiver usando uma versão recente do Microsoft SQL Server, tais como 2005 ou 2008, você pode usar "Expressões de tabela comuns" em vez de criar uma tabela temporária. Dependendo da configuração do esquema e do servidor, isso pode fornecer um aumento no desempenho.