sql >> Base de Datos >  >> RDS >> Mysql

Calcular decil a partir de la frecuencia en MySQL

A veces, es posible que desee calcular el decil a partir de la frecuencia o los recuentos en MySQL en función de. Por ejemplo, para clasificar a los clientes según el número de compras o pedidos en lugar de según las ventas totales

Calcular decil a partir de la frecuencia

Todavía no hay funciones para él. Aquí hay una consulta preparada para hacerlo.

Por ejemplo, tiene una tabla pedidos que contiene todos los pedidos de productos para cada usuario. Desea calcular el decil a partir de la frecuencia de los pedidos.

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       |
+-----------+----------+---------+---------------+

Aquí hay una consulta que puede usar para calcular el decil a partir de la frecuencia o el conteo en MySQL. Simplemente reemplace las columnas:ID de usuario, ventas y tabla:orden. Cuenta el número de pedidos de cada usuario. Luego los clasifica según el número de pedidos. Finalmente, calcula el decil usando el rango.

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 ya tiene una cantidad de pedidos para cada usuario en la tabla y desea usar la tabla directamente para calcular el decil a partir de la frecuencia o el conteo, aquí tiene una consulta