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

Calcular decil de recência no MySQL


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

Calcular decil de recência


Isso ajuda a criar ofertas especiais para pessoas que compraram algo recentemente em seu site. 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 a partir da recência dos pedidos.
order
+-----------+------------+------------------+
|  user_id  |   product  |   purchase_date  |
+-----------+------------+------------------+
|     1     |     Soap   |     2013-11-20   |
|     4     |   Perfume  |     2013-07-02   |
|     1     |   Noodles  |     2013-10-20   |
|     4     |     Soap   |     2013-11-11   |
|     1     |    Glue    |     2013-09-12   |
|     3     |     Deo    |     2013-10-20   |
+-----------+------------+------------------+
deciles
+-----------+----------------+---------+---------------+
|  user_id  |   latest       |  rank   |     decile    |
+-----------+----------------+---------+---------------+
|     1     |  2013-11-20    |    1    |      100      |
|     4     |  2013-11-11    |    2    |     66.67     |
|     3     |  2013-10-20    |    3    |     33.33     |
+-----------+----------------+---------+---------------+

Aqui está uma consulta que você pode usar para calcular decil de recência no MySQL. Basta substituir as colunas – user_id, purchase_date e table – order. Ele obtém a última data de compra de cada usuário. Em seguida, ele os classifica com base na data de compra mais recente. Finalmente, ele calcula o decil usando a classificação.
select user_id,latest,rank,round(10*(cnt-rank+1)/cnt,0) as decile from   
(SELECT  user_id,latest,@curRank := @curRank + 1 AS rank
FROM      (select user_id,max(purchase_date) as latest from `order` group by user_id)
p, (SELECT @curRank := 0) r
ORDER BY  latest desc ) as dt,(select count(distinct user_id) as cnt from
`order`) as ct

Se você já tem a data de compra mais recente para cada usuário na tabela e deseja usar diretamente a tabela para calcular o decil a partir da data de compra recente, aqui está uma consulta