- Catégories :
WIDTH_BUCKET¶
Construit des histogrammes de largeur égale, dans lesquels la plage de l’histogramme est divisée en intervalles de taille identique et retourne le nombre de compartiments dans lesquels la valeur d’une expression échoue, après son évaluation. La fonction retourne une valeur entière ou « null » (si une entrée est « null »).
Syntaxe¶
WIDTH_BUCKET( <expr> , <min_value> , <max_value> , <num_buckets> )
Arguments¶
expr
Expression pour laquelle l’histogramme est créé. Cette expression doit être évaluée à une valeur numérique ou à une valeur qui peut être implicitement convertie en valeur numérique.
La valeur doit être comprise entre
-(2^53 - 1)
et2^53 - 1
(inclus).min_value
etmax_value
Les points de terminaison bas et hauts de la plage acceptable pour l’expression. Les points de terminaison doivent également être évalués par rapport à des valeurs numériques et ne pas être égaux.
Les points extrêmes bas et haut doivent être compris entre
-(2^53 - 1)
et2^53 - 1
(inclus). En outre, la différence entre ces points doit être inférieure à2^53
(c’est-à-direabs(max_value - min_value) < 2^53
).num_buckets
Le nombre de compartiments désiré ; doit être une valeur entière positive. Une valeur de l’expression est assignée à chaque bucket, et la fonction renvoie alors le numéro de bucket correspondant.
Lorsqu’une expression se situe en dehors de la plage, la fonction retourne :
0
si l’expression est inférieure àmin_value
.num_buckets + 1
si l’expression est supérieure ou égale àmax_value
.
Exemple¶
Créez un histogramme de quatre compartiments sur la colonne price
pour des maisons vendues dans la fourchette de prix allant de 200 000 $ à 600 000 $, classées par date de vente. La fonction retourne le numéro de compartiment (SALES GROUP
) pour chaque valeur de l’ensemble.
Créez et remplissez une table :
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);Interrogez la table en appelant 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 | +------------+-----------+-------------+