Tecnología

Inicio

Cómo calcular la mediana en SQL

Cómo calcular la mediana en SQL


Cálculo de la mediana de un conjunto es más difícil que el simple cálculo de la media o media de un conjunto. Agregar a la sintaxis y la complejidad de SQL y la tarea puede parecer insuperables en un primer momento. Sin embargo, con algunos conceptos simples y algunos ejemplos, el cálculo del valor de la mediana es ningún sudor. Este tutorial va a utilizar Transact-SQL para sus ejemplos.

Instrucciones

La mediana de la búsqueda

1 Entender la diferencia entre la mediana y la media de un conjunto. La mediana es el "valor medio" de un conjunto, mientras que la media es el promedio de todos los elementos de un conjunto. Por ejemplo, dado un conjunto ordenado de números de {1, 2, 6, 9, 10, 11}, la mediana será 7.5 ([6 + 9] / 2), pero la media es 6,5 ([1 + 2 + 6 + 9 + 10 + 11] / 6).

Para calcular la mediana, contar el número de elementos en el conjunto. Si el recuento es aún, tomar el promedio del elemento en la posición que se encuentra por el recuento total de elementos y dividiendo por dos y la posición se obtiene dividiendo el número total de elementos por 2 y la adición de uno. Si el recuento es impar, tome el elemento en la posición marcada por el recuento total dividido por dos y redondeado al número entero más cercano.

2 Crear un conjunto ordenado de números con un nuevo índice entero. Por ejemplo, si los datos numéricos se almacena en la columna "num" de la tabla "Datos", crear una nueva tabla temporal que contiene el valor "num" con un nuevo índice:

CREAR TABLA #values ​​(
int ID NO IDENTIDAD NULL (1,1),
num numérico (9,4)
)

INSERT INTO #values ​​(num)
num SELECT
a partir de datos
ORDER BY num

La instrucción ORDER BY es muy importante para el cálculo de la mediana.

3 Seleccione los datos de la tabla temporal en el que el ID es igual a la mitad del número de registros de la tabla. Si hay un número impar de registros, tomar el promedio de los dos valores como la media final. Esto se puede lograr en la única consulta a continuación:

SELECT PROMEDIO (num)
DE #values ​​v
UNIRSE (
SELECT COUNT (*) AS cnt
DE #values ​​_v
) C en (
c.ID = TECHO (_v.cnt / 2.0)
Y (

_v.cnt % 2 = 1 -- cnt is odd
OR (
_v.cnt % 2 = 0 -- cnt is even
AND c.ID = (_v.cnt / 2.0) + 1
)

)
)

Esta consulta utiliza una subconsulta para encontrar el número de registros de manera que el valor medio se puede determinar. Tanto en el caso de un par número y un recuento impar, el uso de techo para redondear (_v.cnt / 2.0) es exacta. (Por ejemplo, Incluso: 6/2 = 3; Odd: 7/2 = 3.5, que se redondea a 4) Además, cuando el recuento es par, añadir 1 al (_v.cnt / 2.0) para obtener el segundo elemento de incluir en el medio final.

Consejos y advertencias

  • Si está utilizando una versión reciente de Microsoft SQL Server, como 2005 ó 2008, puede utilizar "expresiones de tabla comunes" en lugar de crear una tabla temporal. Dependiendo de la configuración del esquema y el servidor, esto puede proporcionar un aumento en el rendimiento.