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

Calculer le décile à partir de la fréquence dans MySQL

Parfois, vous voudrez peut-être calculer le décile à partir de la fréquence ou du nombre dans MySQL en fonction de. Par exemple, pour classer les clients en fonction du nombre d'achats ou de commandes plutôt qu'en fonction du total des ventes

Calculer le décile à partir de la fréquence

Il n'y a pas encore de fonctions pour cela. Voici une requête toute faite pour le faire.

Par exemple, vous avez une table commandes qui contient toutes les commandes de produits pour chaque utilisateur. Vous souhaitez calculer le décile à partir de la fréquence des commandes.

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

Voici une requête que vous pouvez utiliser pour calculer le décile à partir de la fréquence ou du nombre dans MySQL. Remplacez simplement les colonnes - user_id, sales et table - order. Il compte le nombre de commandes pour chaque utilisateur. Ensuite, il les classe sur le nombre de commandes. 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,count(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à un nombre de commandes pour chaque utilisateur dans le tableau et que vous souhaitez utiliser directement le tableau pour calculer le décile à partir de la fréquence ou du nombre, voici une requête