ConsigneSur la table orders (customer_id, order_date, price, quantity), calcule par client : la récence (jours depuis le dernier order_date), la fréquence (nb de commandes) et le montant (SUM(price*quantity)). Attribue un score NTILE(5) à chaque axe (r_score, f_score, m_score), puis un segment_label (Champions, Fideles, Nouveaux, A risque, Perdus, Autres). Trie par montant décroissant.
La segmentation rfm classe les clients selon 3 axes :
Recence = temps depuis le dernier achat (récent = mieux)Frequence = nombre d'achatsMontant = total depenseExemple (table commandes) :
WITH segmentation AS ( SELECT client_id, CURRENT_DATE - MAX(date_commande)::date AS recence_jours, COUNT(*) AS frequence, SUM(montant) AS montant_total FROM commandes GROUP BY client_id)SELECT * FROM segmentation;On utilise souvent ntile(5) pour donner un score de 1 a 5 par axe, le score 5 revenant au meilleur profil.
Attention au sens DU tri : ntile numérote les paquets dans l'ordre du tri, donc le paquet 1 est toujours celui du début du tri. Pour que le meilleur profil reçoive bien 5, il faut trier par récence décroissante (le plus grand nombre de jours d'abord, donc le client le plus ancien en 1 et le plus récent en 5) et par fréquence et montant croissants. Un tri à l'envers fait sortir vos meilleurs clients en « Perdus ».
Rappel : l'opérateur || concatène du texte (vu à l'exercice 38) ; ::text convertit un nombre en texte, ex. r_score::text || f_score::text.
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →