PERCENTILEfunzione _ CONT window - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

PERCENTILEfunzione _ CONT window

PERCENTILE_ CONT è una funzione di distribuzione inversa che presuppone un modello di distribuzione continua. Prende un valore percentile e una specifica di ordinamento e restituisce un valore interpolato che rientrerebbe nel valore percentile dato rispetto alla specifica di ordinamento.

PERCENTILE_ CONT calcola un'interpolazione lineare tra i valori dopo averli ordinati. Usando il valore percentile (P) e il numero di righe non null (N) nel gruppo di aggregazione, la funzione calcola il numero di righe dopo aver ordinato le righe secondo la specifica di ordinamento. Questo numero di riga (RN) è calcolato secondo la formula RN = (1+ (P*(N-1)). Il risultato finale della funzione di aggregazione è calcolato mediante interpolazione lineare tra i valori delle righe ai numeri di riga CRN = CEILING(RN) e FRN = FLOOR(RN).

Il risultato finale sarà il seguente.

Se (CRN = FRN = RN) allora il risultato è (value of expression from row at RN)

Altrimenti il risultato è il seguente:

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

È possibile specificare solo la PARTITION clausola nella clausola. OVER Se PARTITION specificato, per ogni riga, PERCENTILE _ CONT restituisce il valore che rientrerebbe nel percentile specificato tra un insieme di valori all'interno di una determinata partizione.

Sintassi

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

Argomenti

percentile

Costante numerica compresa tra 0 e 1. I valori null vengono ignorati nel calcolo.

WITHINGROUP(DI ORDER expr)

Specifica i valori numerici o di data/ora per ordinare e calcolare il percentile.

OVER

Specifica il partizionamento della finestra. La OVER clausola non può contenere un ordine delle finestre o una specifica del telaio della finestra.

PARTITIONDI expr

Argomento facoltativo che imposta l'intervallo di record per ogni gruppo della OVER clausola.

Valori restituiti

Il tipo restituito è determinato dal tipo di dati dell'espressione ORDER BY nella WITHIN GROUP clausola. La tabella seguente mostra il tipo restituito per ogni tipo di dati dell'espressione ORDER BY.

Tipo di input Tipo restituito
INT2, INT4, INT8, NUMERIC, DECIMAL DECIMAL
FLOAT, DOUBLE DOUBLE
DATE DATE
TIMESTAMP TIMESTAMP

Note per l'utilizzo

Se l'espressione ORDER BY è un tipo di DECIMAL dati definito con la precisione massima di 38 cifre, è possibile che PERCENTILE _ CONT restituisca un risultato impreciso o un errore. Se il valore restituito dalla CONT funzione PERCENTILE _ supera le 38 cifre, il risultato viene troncato per adattarsi, con conseguente perdita di precisione. Se, durante l'interpolazione, un risultato intermedio supera la precisione massima, si verifica un'eccedenza numerica e la funzione restituisce un errore. Per evitare queste condizioni, si consiglia di utilizzare un tipo di dati con una precisione inferiore o di eseguire l'espressione ORDER BY con una precisione inferiore.

Ad esempio, una SUM funzione con un DECIMAL argomento restituisce una precisione predefinita di 38 cifre. Il ridimensionamento del risultato coincide con il ridimensionamento dell'argomento. Quindi, ad esempio, una colonna SUM di DECIMAL (5,2) restituisce un tipo di dati DECIMAL (38,2).

L'esempio seguente utilizza una SUM funzione nella clausola ORDER BY di una PERCENTILE funzione _. CONT Il tipo di dati della PRICEPAID colonna è DECIMAL (8,2), quindi la SUM funzione restituisce 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;

Per evitare una potenziale perdita di precisione o un errore di overflow, trasmetti il risultato a un tipo di DECIMAL dati con precisione inferiore, come illustrato nell'esempio seguente.

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;

Esempi

Negli esempi seguenti viene utilizzata la WINSALES tabella. Per una descrizione della WINSALES tabella, vedereTabella di esempio per gli esempi della funzione finestra.

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)

L'esempio seguente calcola PERCENTILE _ CONT e PERCENTILE _ delle vendite DISC di biglietti per i venditori nello stato di 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)
  翻译: