Categorias:

Funções numéricas

WIDTH_BUCKET

Cria histogramas de largura equivalente, nos quais o alcance dos histogramas é dividido em intervalos de tamanho idêntico, e retorna o número do bucket que recebe o valor de uma expressão após ter sido avaliada. A função retorna um valor inteiro ou nulo (se alguma entrada for nula).

Sintaxe

WIDTH_BUCKET( <expr> , <min_value> , <max_value> , <num_buckets> )
Copy

Argumentos

expr

A expressão para a qual o histograma é criado. Esta expressão deve ser avaliada como um valor numérico ou como um valor que possa ser implicitamente convertido em um valor numérico.

O valor deve estar dentro da faixa de -(2^53 - 1) a 2^53 - 1 (inclusive).

min_value e max_value

Os pontos baixos e altos da faixa aceitável para a expressão. Os pontos finais também devem ser avaliados como valores numéricos e não devem ser iguais.

Os pontos baixo e alto devem estar dentro da faixa de -(2^53 - 1) a 2^53 - 1 (inclusive). Além disso, a diferença entre estes pontos deve ser inferior a 2^53 (isto é, abs(max_value - min_value) < 2^53).

num_buckets

O número desejado de buckets; deve ser um valor inteiro positivo. Um valor da expressão é atribuído a cada bucket, e a função retorna então o número do bucket correspondente.

Quando uma expressão fica fora do intervalo, a função retorna:

  • 0 se a expressão for inferior a min_value.

  • num_buckets + 1 se a expressão for maior ou igual a max_value.

Exemplo

Crie um histograma de quatro buckets na coluna price para casas vendidas na faixa de preço de $200 - 600 mil, ordenado por data de venda. A função retorna o número do bucket (SALES GROUP) para cada valor do conjunto.

Criar e preencher uma tabela:

CREATE TABLE home_sales (
    sale_date DATE,
    price NUMBER(11, 2)
    );
INSERT INTO home_sales (sale_date, price) VALUES 
    ('2013-08-01'::DATE, 290000.00),
    ('2014-02-01'::DATE, 320000.00),
    ('2015-04-01'::DATE, 399999.99),
    ('2016-04-01'::DATE, 400000.00),
    ('2017-04-01'::DATE, 470000.00),
    ('2018-04-01'::DATE, 510000.00);
Copy

Consulte a tabela, chamando WIDTH_BUCKET():

SELECT 
    sale_date, 
    price,
    WIDTH_BUCKET(price, 200000, 600000, 4) AS "SALES GROUP"
  FROM home_sales
  ORDER BY sale_date;
+------------+-----------+-------------+
| SALE_DATE  |     PRICE | SALES GROUP |
|------------+-----------+-------------|
| 2013-08-01 | 290000.00 |           1 |
| 2014-02-01 | 320000.00 |           2 |
| 2015-04-01 | 399999.99 |           2 |
| 2016-04-01 | 400000.00 |           3 |
| 2017-04-01 | 470000.00 |           3 |
| 2018-04-01 | 510000.00 |           4 |
+------------+-----------+-------------+
Copy