Función APPROXIMATE PERCENTILE_DISC - Amazon Redshift

Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del 1 de noviembre de 2025. Si desea utilizar las UDF de Python, créelas antes de esa fecha. Las UDF de Python existentes seguirán funcionando con normalidad. Para obtener más información, consulte la publicación del blog.

Función APPROXIMATE PERCENTILE_DISC

APPROXIMATE PERCENTILE_DISC es una función de distribución inversa que asume un modelo de distribución discreta. Toma un valor percentil y una especificación de ordenación, y devuelve un elemento del conjunto dado. La aproximación permite que la función se ejecute mucho más rápido, con un margen de error relativamente bajo de alrededor del 0,5 %.

En un percentil dado, APPROXIMATE PERCENTILE_DISC utiliza un algoritmo de resumen de cuartiles para aproximar el percentil discreto de la expresión en la cláusula ORDER BY. APPROXIMATE PERCENTILE_DISC devuelve el menor valor de distribución acumulado (con respecto a la misma especificación de ordenación) que sea mayor o igual que el percentil.

Sintaxis

APPROXIMATE PERCENTILE_DISC ( percentile ) WITHIN GROUP (ORDER BY expr)

Argumentos

percentil

Constante numérica entre 0 y 1. Los valores nulos se ignoran en el cálculo.

WITHIN GROUP ( ORDER BY expr)

Cláusula que especifica valores numéricos o de fecha/hora para ordenar y calcular el percentil.

Devuelve

El mismo tipo de datos que la expresión ORDER BY en la cláusula WITHIN GROUP.

Notas de uso

Si la instrucción APPROXIMATE PERCENTILE_DISC incluye una cláusula GROUP BY, el conjunto de resultados es limitado. El límite varía según el tipo de nodo y la cantidad de nodos. Si se supera el límite, la función falla y devuelve el siguiente mensaje de error.

GROUP BY limit for approximate percentile_disc exceeded.

Si necesita evaluar más grupos que los permitidos, considere usar Función PERCENTILE_CONT.

Ejemplos

El siguiente ejemplo devuelve la cantidad de ventas, las ventas totales y el valor del décimo quinto percentil para las 10 primeras fechas.

select top 10 date.caldate, count(totalprice), sum(totalprice), approximate percentile_disc(0.5) within group (order by totalprice) from listing join date on listing.dateid = date.dateid group by date.caldate order by 3 desc; caldate | count | sum | percentile_disc -----------+-------+------------+---------------- 2008-01-07 | 658 | 2081400.00 | 2020.00 2008-01-02 | 614 | 2064840.00 | 2178.00 2008-07-22 | 593 | 1994256.00 | 2214.00 2008-01-26 | 595 | 1993188.00 | 2272.00 2008-02-24 | 655 | 1975345.00 | 2070.00 2008-02-04 | 616 | 1972491.00 | 1995.00 2008-02-14 | 628 | 1971759.00 | 2184.00 2008-09-01 | 600 | 1944976.00 | 2100.00 2008-07-29 | 597 | 1944488.00 | 2106.00 2008-07-23 | 592 | 1943265.00 | 1974.00