Mysql
 sql >> Base de données >  >> RDS >> Mysql

Calculer le décile dans MySQL en fonction des totaux

Vous pouvez calculer le décile dans MySQL pour identifier les meilleurs clients. Fondamentalement, vous classez et regroupez les clients en 10 groupes en fonction des ventes totales. En fonction du résultat, vous pouvez proposer des initiatives de rétention plus ciblées et pertinentes. Voici une requête toute faite pour le faire.

Calculer le décile dans MySQL

Par exemple, vous avez une table commandes qui contient toutes les commandes de produits pour chaque utilisateur. Vous voulez calculer le décile dans MySQL.

order
+-----------+------------+----------+
|  user_id  |   product  |   sales  |
+-----------+------------+----------+
|     1     |     Soap   |    10    |
|     4     |   Perfume  |   100    |
|     1     |   Noodles  |   20     |
|     3     |     Deo    |   200    |
+-----------+------------+----------+
deciles
+-----------+----------+---------+---------------+
|  user_id  |   total  |  rank   |     decile    |
+-----------+----------+---------+---------------+
|     1     |    30    |    3    |       3       |
|     4     |   100    |    2    |       7       |
|     3     |   200    |    1    |      10       |
+-----------+----------+---------+---------------+

Voici une requête que vous pouvez utiliser pour calculer le décile dans MySQL en fonction des totaux. Remplacez simplement les colonnes - user_id, sales et table - order. Il agrège les ventes totales pour chaque utilisateur. Ensuite, il les classe sur les ventes totales. Enfin, il calcule le décile en utilisant le rang.

select user_id,total,rank,round(10*(cnt-rank+1)/cnt,0) as decile from   
(SELECT  user_id,total,@curRank := @curRank + 1 AS rank
FROM      (select user_id,sum(sales) as total from `order` group by user_id)
p, (SELECT @curRank := 0) r
ORDER BY  total desc ) as dt,(select count(distinct user_id) as cnt from
`order`) as ct

Si vous avez déjà des ventes totales pour chaque utilisateur dans le tableau et que vous souhaitez utiliser directement le tableau pour calculer le décile, voici une requête