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

MySQLの頻度から十分位数を計算する

    MySQLの頻度またはカウントから十分位数を計算したい場合があります。例:総売上高ではなく、購入または注文数に基づいて顧客をランク付けする

    頻度から十分位数を計算する

    そのための機能はまだありません。これを行うための既製のクエリがあります。

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

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

    これは、MySQLの頻度またはカウントから十分位数を計算するために使用できるクエリです。列(user_id、sales、table)を置き換えるだけです。各ユーザーの注文数をカウントします。次に、注文数でランク付けします。最後に、ランクを使用して十分位数を計算します。

    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

    テーブル内の各ユーザーの注文数がすでにあり、テーブルを直接使用して頻度またはカウントから十分位数を計算する場合は、次のクエリを使用します

    1. Debian/UbuntuでのPostgreSQLレプリケーションセットアップの作成

    2. OracleのBFILE列からBLOBを取得する

    3. Djangoのユニークな一緒の制約の失敗?

    4. エンベロープを取得します。つまり、重複する期間