

 Amazon Redshift dejará de admitir la creación de nuevas UDF de Python a partir del parche 198. Las UDF de Python existentes seguirán funcionando hasta el 30 de junio de 2026. Para obtener más información, consulte la [publicación del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

# Función de ventana PERCENTILE\$1CONT
<a name="r_WF_PERCENTILE_CONT"></a>

PERCENTILE\$1CONT es una función de distribución inversa que asume un modelo de distribución continua. Toma un valor percentil y una especificación de ordenación, y devuelve un valor interpolado que se encuadraría dentro de ese valor percentil dado respecto de la especificación de ordenación. 

PERCENTILE\$1CONT computa una interpolación linear entre valores después de ordenarlos. Utilizando el valor percentil `(P)` y la cantidad de filas no nulas `(N)` en el grupo de agregación, la función computa la cantidad de filas después de ordenar las filas según la especificación de ordenación. Esta cantidad de filas `(RN)` se computa según la fórmula `RN = (1+ (P*(N-1))`. El resultado final de la función de agregación se computa por interpolación lineal entre los valores de filas en números de filas `CRN = CEILING(RN)` y `FRN = FLOOR(RN)`. 

El resultado final será el siguiente.

Si `(CRN = FRN = RN)`, entonces el resultado es `(value of expression from row at RN)` 

De lo contrario, el resultado es el siguiente:

`(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)`.

Puede especificar solamente la cláusula PARTITION en la cláusula OVER. Si se especifica PARTITION, para cada fila, PERCENTILE\$1CONT devuelve el valor que se encuadraría dentro de ese valor percentil especificado dentro de un conjunto de valores en una partición dada. 

## Sintaxis
<a name="r_WF_PERCENTILE_CONT-synopsis"></a>

```
PERCENTILE_CONT ( percentile )
WITHIN GROUP (ORDER BY expr)
OVER (  [ PARTITION BY expr_list ]  )
```

## Argumentos
<a name="r_WF_PERCENTILE_CONT-arguments"></a>

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

WITHIN GROUP ( ORDER BY *expr*)   
Valores numéricos o de fecha/hora específicos para ordenar y calcular el percentil. 

OVER   
Especifica la partición de ventana. La cláusula OVER no puede contener una especificación de marco de ventana u ordenamiento.

PARTITION BY *expr*   
Argumento opcional que establece el rango de registros para cada grupo en la cláusula OVER.

## Devuelve
<a name="r_WF_PERCENTILE_CONT-returns"></a>

El tipo de retorno se determina por el tipo de datos de la expresión ORDER BY en la cláusula WITHIN GROUP. En la tabla siguiente, se muestra el tipo de retorno para cada tipo de datos de la expresión ORDER BY.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/redshift/latest/dg/r_WF_PERCENTILE_CONT.html)

## Notas de uso
<a name="r_WF_PERCENTILE_CONT-usage-notes"></a>

Si la expresión ORDER BY es un tipo de dato DECIMAL definido con la precisión máxima de 38 dígitos, es posible que PERCENTILE\$1CONT devuelva un resultado impreciso o un error. Si el valor de retorno de la función PERCENTILE\$1CONT 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 la expresión ORDER BY a una precisión menor. 

Por ejemplo, la función SUM con un argumento DECIMAL devuelve una precisión predeterminada de 38 dígitos. La escala del resultado es la misma que la escala del argumento. Entonces, por ejemplo, un SUM de una columna DECIMAL(5,2) devuelve un tipo de dato DECIMAL(38,2). 

En el siguiente ejemplo, se utiliza una función SUM en la cláusula ORDER BY de una función PERCENTILE\$1CONT. El tipo de datos de la columna PRICEPAID es DECIMAL (8,2), por lo que la función SUM devuelve un DECIMAL (38,2). 

```
select salesid, sum(pricepaid), percentile_cont(0.6) 
within group (order by sum(pricepaid) desc) over()
from sales where salesid < 10 group by salesid;
```

Para evitar una posible pérdida de precisión o un error de desbordamiento, convierta el resultado a un tipo de dato DECIMAL con menor precisión, como se muestra en el siguiente ejemplo.

```
select salesid, sum(pricepaid), percentile_cont(0.6) 
within group (order by sum(pricepaid)::decimal(30,2) desc) over()
from sales where salesid < 10 group by salesid;
```

## Ejemplos
<a name="r_WF_PERCENTILE_CONT-examples"></a>

En los siguientes ejemplos, se utiliza la tabla WINSALES. Para ver una descripción de la tabla WINSALES, consulte [Tabla de muestra para ejemplos de funciones de ventana](c_Window_functions.md#r_Window_function_example). 

```
select sellerid, qty, percentile_cont(0.5) 
within group (order by qty) 
over() as median from winsales;

 sellerid | qty | median 
----------+-----+--------
        1 |  10 |   20.0
        1 |  10 |   20.0
        3 |  10 |   20.0
        4 |  10 |   20.0
        3 |  15 |   20.0
        2 |  20 |   20.0
        3 |  20 |   20.0
        2 |  20 |   20.0
        3 |  30 |   20.0
        1 |  30 |   20.0
        4 |  40 |   20.0
(11 rows)
```

```
select sellerid, qty, percentile_cont(0.5) 
within group (order by qty) 
over(partition by sellerid) as median from winsales;

 sellerid | qty | median 
----------+-----+--------
        2 |  20 |   20.0
        2 |  20 |   20.0
        4 |  10 |   25.0
        4 |  40 |   25.0
        1 |  10 |   10.0
        1 |  10 |   10.0
        1 |  30 |   10.0
        3 |  10 |   17.5
        3 |  15 |   17.5
        3 |  20 |   17.5
        3 |  30 |   17.5
(11 rows)
```

En el siguiente ejemplo, se calcula PERCENTILE\$1CONT y PERCENTILE\$1DISC de las ventas de tickets para vendedores en el estado de Washington. 

```
SELECT sellerid, state, sum(qtysold*pricepaid) sales, 
percentile_cont(0.6) within group (order by sum(qtysold*pricepaid::decimal(14,2) ) desc) over(),
percentile_disc(0.6) within group (order by sum(qtysold*pricepaid::decimal(14,2) ) desc) over()
from sales s, users u 
where s.sellerid = u.userid and state = 'WA' and sellerid < 1000
group by sellerid, state;

 sellerid | state |  sales  | percentile_cont | percentile_disc
----------+-------+---------+-----------------+-----------------
      127 | WA    | 6076.00 |         2044.20 |         1531.00
      787 | WA    | 6035.00 |         2044.20 |         1531.00
      381 | WA    | 5881.00 |         2044.20 |         1531.00
      777 | WA    | 2814.00 |         2044.20 |         1531.00
       33 | WA    | 1531.00 |         2044.20 |         1531.00
      800 | WA    | 1476.00 |         2044.20 |         1531.00
        1 | WA    | 1177.00 |         2044.20 |         1531.00
(7 rows)
```