Función MEDIAN - Amazon Redshift

Función MEDIAN

Calcula el valor medio del rango de valores. Los valores NULL del rango se ignoran.

MEDIAN es una función de distribución inversa que asume un modelo de distribución continua.

MEDIAN es un caso especial de PERCENTILE_CONT.

Sintaxis

MEDIAN(median_expression)

Argumentos

expresión_de_mediana

La columna o expresión de destino sobre la que opera la función.

Tipos de datos

El tipo de valor devuelto viene determinado por el tipo de datos de expresión_de_mediana. En la tabla siguiente, se muestra el tipo de valor devuelto para cada tipo de datos de expresión_de_mediana.

Tipo de entrada Tipo de retorno
INT2, INT4, INT8, NUMERIC, DECIMAL DECIMAL
FLOAT, DOUBLE DOUBLE
DATE DATE
TIMESTAMP TIMESTAMP
TIMESTAMPTZ TIMESTAMPTZ

Notas de uso

Si el argumento median_expression es un tipo de dato DECIMAL definido con la precisión máxima de 38 dígitos, es posible que MEDIAN devuelva un resultado impreciso o un error. Si el valor de retorno de la función MEDIAN supera los 38 dígitos, el resultado se trunca para adaptarse, lo que genera pérdida de precisión. Si, durante la interpolación, un resultado intermedio supera la precisión máxima, se produce un desbordamiento numérico y la función devuelve un error. Para evitar estas condiciones, recomendamos usar un tipo de dato con menor precisión o emitir el argumento median_expression con una precisión menor.

Si una instrucción incluye varias llamadas a funciones de agregación basadas en ordenación (LISTAGG, PERCENTILE_CONT o MEDIAN), todas deben usar los mismos valores ORDER BY. Tenga en cuenta que MEDIAN aplica un comando ORDER BY implícito en el valor de expresión.

Por ejemplo, la siguiente instrucción devuelve un error.

SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(pricepaid) FROM sales GROUP BY salesid, pricepaid; An error occurred when executing the SQL command: SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(pricepaid) FROM sales GROUP BY salesid, pricepaid; ERROR: within group ORDER BY clauses for aggregate functions must be the same

La siguiente instrucción se ejecuta correctamente.

SELECT TOP 10 salesid, SUM(pricepaid), PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid), MEDIAN(salesid) FROM sales GROUP BY salesid, pricepaid;

Ejemplos

En los siguientes ejemplos se utiliza la base de datos de ejemplo TICKIT. Para obtener más información, consulte Base de datos de muestra.

En el siguiente ejemplo, se muestra que MEDIAN produce los mismos resultados que PERCENTILE_CONT(0.5).

SELECT TOP 10 DISTINCT sellerid, qtysold, PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold), MEDIAN(qtysold) FROM sales GROUP BY sellerid, qtysold; +----------+---------+-----------------+--------+ | sellerid | qtysold | percentile_cont | median | +----------+---------+-----------------+--------+ | 2 | 2 | 2 | 2 | | 26 | 1 | 1 | 1 | | 33 | 1 | 1 | 1 | | 38 | 1 | 1 | 1 | | 43 | 1 | 1 | 1 | | 48 | 2 | 2 | 2 | | 48 | 3 | 3 | 3 | | 77 | 4 | 4 | 4 | | 85 | 4 | 4 | 4 | | 95 | 2 | 2 | 2 | +----------+---------+-----------------+--------+

En el siguiente ejemplo se encuentra la cantidad media vendida para cada sellerid.

SELECT sellerid, MEDIAN(qtysold) FROM sales GROUP BY sellerid ORDER BY sellerid LIMIT 10; +----------+--------+ | sellerid | median | +----------+--------+ | 1 | 1.5 | | 2 | 2 | | 3 | 2 | | 4 | 2 | | 5 | 1 | | 6 | 1 | | 7 | 1.5 | | 8 | 1 | | 9 | 4 | | 12 | 2 | +----------+--------+

Para comprobar los resultados de la consulta anterior del primer sellerid, use el siguiente ejemplo.

SELECT qtysold FROM sales WHERE sellerid=1; +---------+ | qtysold | +---------+ | 2 | | 1 | +---------+