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

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

Date de sortie
15/10/2024
Auteur
U
Untitled
“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 !