SQL - C’est quoi RANGE_BUCKET() sur BigQuery ?

SQL - C’est quoi RANGE_BUCKET() sur BigQuery ?

Date de sortie
October 15, 2024
Auteur
Bertrand Fabre
“On m’a demandé de faire une segmentation client basée sur le nombre d’achat sur un an glissant. Je fais avec un CASE WHEN mais ça fait chargé. Il n’y a pas mieux ?

Tout va dépendre du besoin en sortie, mais pour classer les données en différentes tranches sur BigQuery il y a la fonction RANGE_BUCKET().

Syntaxe

RANGE_BUCKET(la_valeur_à_classer, les_différentes_tranches)

Un exemple étant toujours plus parlant, en voici un.

Obtenir la classification des clients selon le nombre d’achat

On veut appliquer les règles suivantes :

  • Client en base mais pas d’achat sur un an glissant → Classification 0
  • Entre 1 et 4 achats → Classification 1
  • Entre 5 et 9 achats → Classification 2
  • A partir de 10 achats → Classification 3

Voici ce que cela pourrait donner avec l’utilisation de RANGE_BUCKET() :

WITH cte_agg_sales_by_customer AS (
  SELECT
    custId,
    nbSales
  FROM
    UNNEST([
      STRUCT(1 AS custId, 4 AS nbSales),
      STRUCT(2 AS custId, 21 AS nbSales),
      STRUCT(3 AS custId, 9 AS nbSales),
      STRUCT(4 AS custId, 5 AS nbSales),
      STRUCT(5 AS custId, 0 AS nbSales)
    ]) AS sales
)

SELECT
  custId,
  nbSales,
  RANGE_BUCKET(nbSales, [1, 5, 10]) AS custCategory
FROM
  cte_agg_sales_by_customer;

Le résultat :

custId
nbSales
custCategory
1
4
1
2
21
3
3
9
2
4
5
2
5
0
0

Dans un moindre effort, nous avons classé les différents clients en 4 catégories de 0 à 3.

Sachant que 0 signifie que le client n’a pas effectué d’achat sur les 12 derniers mois et 3 le client a un certain niveau d’achat.

Merci de votre lecture !