Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Calcular decil de frequência no MySQL


Às vezes você pode querer calcular decil de frequência ou contagens no MySQL com base em. Por exemplo, para classificar os clientes com base no número de compras ou pedidos em vez de com base no total de vendas

Calcular decil a partir da frequência


Ainda não há funções para isso. Aqui está uma consulta pronta para fazer isso.

Por exemplo, você tem uma tabela pedidos que contém todos os pedidos de produtos para cada usuário. Você deseja calcular o decil da frequência dos 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       |
+-----------+----------+---------+---------------+

Aqui está uma consulta que você pode usar para calcular decil de frequência ou contagem no MySQL. Basta substituir as colunas – user_id, vendas e tabela – ordem. Ele conta o número de pedidos para cada usuário. Em seguida, ele os classifica em número de pedidos. Finalmente, ele calcula o decil usando a classificação.
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

Se você já tem o número de pedidos para cada usuário na tabela e deseja usar diretamente a tabela para calcular o decil a partir da frequência ou contagem, aqui está uma consulta