sql >> データベース >  >> RDS >> Mysql

MySQLの最新性から十分位数を計算する

    に基づいてMySQLの最新性から十分位数を計算したい場合があります。たとえば、総売上高ではなく、購入または注文の最新性に基づいて顧客をランク付けします。

    最新性から十分位数を計算する

    これは、最近Webサイトで何かを購入した人のための特別オファーを作成するのに役立ちます。そのための機能はまだありません。これを行うための既製のクエリがあります。

    例:テーブルの注文があります これには、各ユーザーのすべての製品注文が含まれています。注文の最新性から十分位数を計算したい。

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

    これは、MySQLの最新性から十分位数を計算するために使用できるクエリです。列(user_id、purchase_date、table)を置き換えるだけです。各ユーザーの最新の購入日を取得します。次に、購入日の最新のものにランク付けします。最後に、ランクを使用して十分位数を計算します。

    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

    テーブル内の各ユーザーの最新の購入日がすでにあり、テーブルを直接使用して購入の最新性から十分位数を計算する場合は、次のクエリを使用します

    1. Android Studio 3.0カナリア1:SQL構文エラー

    2. PHPでMySQLデータをExcelにエクスポートする

    3. T-SQLとSQL

    4. 特定の列名を持つMySQLのすべてのテーブルを見つけるにはどうすればよいですか?