Oracle
 sql >> Database >  >> RDS >> Oracle

WIDTH_BUCKET() Funzione in Oracle

In Oracle, il WIDTH_BUCKET() La funzione consente di costruire istogrammi di equiampiezza, in cui l'intervallo dell'istogramma è suddiviso in intervalli di dimensioni identiche.

Per una determinata espressione, WIDTH_BUCKET() restituisce il numero di bucket in cui rientrerebbe il valore di questa espressione dopo essere stata valutata.

Sintassi

La sintassi è questa:

WIDTH_BUCKET(expr, min_value, max_value, num_buckets)

Dove:

  • expr è l'espressione per la quale viene creato l'istogramma. Questa espressione deve restituire un valore numerico o datetime oppure un valore che può essere convertito in modo implicito in un valore numerico o datetime. Se expr restituisce null , quindi l'espressione restituisce null .
  • min_value e max_value sono espressioni che si risolvono ai punti finali dell'intervallo accettabile per expr . Entrambe queste espressioni devono anche restituire valori numerici o datetime e nessuna delle due può restituire null .
  • num_buckets è un'espressione che si risolve in una costante che indica il numero di bucket. Questa espressione deve restituire un numero intero positivo.

Esempio

Ecco un esempio per dimostrare come funziona.

SELECT 
  WIDTH_BUCKET(3, 1, 12, 3) AS r1,
  WIDTH_BUCKET(5, 1, 12, 3) AS r2,
  WIDTH_BUCKET(9, 1, 12, 3) AS r3
FROM DUAL;

Risultato:

   R1    R2    R3 
_____ _____ _____ 
    1     2     3 

Ecco una spiegazione. Esaminiamo ogni argomento, partendo dall'ultimo e procedendo a ritroso fino al primo.

  • Quarto argomento :Specifico tre bucket. Lo faccio usando 3 come quarto argomento.
  • Secondo e terzo argomento :Specifico che l'intervallo è compreso tra 1 e 12. In questo caso il mio secondo argomento è 1 e il terzo argomento è 12 .
  • Primo argomento :questo valore viene confrontato con il secondo e il terzo argomento, in modo da sapere a quale dei tre bucket deve essere assegnato. Nel mio esempio chiamo WIDTH_BUCKET() tre volte per illustrare meglio il concetto. Lo faccio in modo da poter fornire tre valori diversi come primo argomento, ognuno dei quali è assegnato a un bucket diverso.

La tabella seguente fornisce un altro modo per visualizzarlo:

Valori Secchio
1, 2, 3, 4 Secchio 1
5, 6, 7, 8 Secchio 2
9, 10, 11, 12 Secchio 3

Quindi possiamo vedere che il primo bucket accetta valori compresi tra 1 e 4, il secondo bucket tra 5 e 8 e il terzo bucket è per valori compresi tra 9 e 12.

Se dovessi cambiarlo in modo che ci fossero quattro bucket, il mio codice potrebbe assomigliare a questo:

SELECT 
  WIDTH_BUCKET(3, 1, 12, 4) AS r1,
  WIDTH_BUCKET(5, 1, 12, 4) AS r2,
  WIDTH_BUCKET(9, 1, 12, 4) AS r3
FROM DUAL;

E la tabella sarebbe simile a questa:

Valori Secchio
1, 2, 3 Secchio 1
4, 5, 6 Secchio 2
7, 8, 9 Secchio 3
10, 11, 12 Secchio 4

Ecco un altro esempio in cui cambiano solo le dimensioni del secchio:

SELECT 
  WIDTH_BUCKET(5, 1, 12, 3) AS r1,
  WIDTH_BUCKET(5, 1, 12, 6) AS r2,
  WIDTH_BUCKET(5, 1, 12, 10) AS r3
FROM DUAL;

Risultato:

   R1    R2    R3 
_____ _____ _____ 
    2     3     4 

Fuori portata

Se l'input è al di fuori dell'intervallo del bucket, otterrai 0 o num_buckets +1, a seconda che l'ingresso sia al di sotto dell'intervallo o al di sopra di esso. In questi casi, Oracle Database crea un bucket di underflow numerato 0 e un bucket di overflow numerato num_buckets +1.

Esempio:

SELECT 
  WIDTH_BUCKET(-3, 1, 12, 3),
  WIDTH_BUCKET(20, 1, 12, 3)
FROM DUAL;

Risultato:

   WIDTH_BUCKET(-3,1,12,3)    WIDTH_BUCKET(20,1,12,3) 
__________________________ __________________________ 
                         0                          4