Catégories :

Fonctions de la fenêtre

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 »).

Note

La fonction WIDTH_BUCKET n’est pas une vraie fonction de fenêtre. Cependant, elle est catégorisée comme une fonction de fenêtre pour les raisons suivantes :

  • Elle effectue des opérations de type fenêtre sur un groupe de lignes.

  • Elle se comporte comme une fenêtre des manières suivantes :

    • Le nombre de valeurs renvoyées est identique au nombre de valeurs d’entrée. (Ainsi, ce n’est pas une fonction d’agrégation.)

    • Chaque valeur renvoyée dépend non seulement de la ligne actuelle, mais également des autres lignes du groupe. (Ainsi, ce n’est pas une fonction scalaire.)

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.

valeur_min et valeur_max

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.

nb_compartiments

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 à valeur_min.

  • nb_compartiments + 1 si l’expression est supérieure ou égale à valeur_max.

Exemple

Créez un histogramme de quatre buckets sur la colonne price pour des maisons vendues dans la fourchette de prix allant de 200 000 $ à 100 000 $, classées par date de vente. La fonction retourne le numéro de bucket (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 |
+------------+-----------+-------------+