この質問のタイトルの書き方はわかりませんが、必要なのはN
、特定の値を持つレコードを返すクエリです。
私が持っているテーブルは520万レコードを超えています
レコードは次のようになります。
- セッション(文字列、プライマリインデックス)
- customer_id(int、インデックス付き)
- クリック数(int、インデックス付き)
- order_number(int、インデックス付き)
- date_entry(datetime、インデックス付き)
- 他の多くの分野
私が知る必要があるのは、注文する前に同じ顧客がサイトにログインした回数(異なるセッション)です(そのセッション中に注文が行われない限り、order_numberは0です)
サンプルデータは次のようになります(データの簡略化)
セッション| c_id | クリック数| ord_num | エントリー| abc | 123 | 2 | 0 | 2012-08-01 00:00:00 | cde | 456 | 2 | 0 | 2012-08-01 00:00:01 | efg | 457 | 2 | 0 | 2012-08-01 00:00:02 | hij | 123 | 5 | 0 | 2012-08-01 00:00:03 | コッド| 986 | 10 | 0 | 2012-08-01 00:00:04 | wdg | 123 | 2 | 9876 | 2012-08-01 00:00:05 | qwe | 123 | 2 | 0 | 2012-08-01 00:00:06 | wvr | 986 | 12 | 8656 | 2012-08-01 00:00:07 |
私が欲しいのは、次のようなものを表示するクエリです。
- エントリ-日付エントリ
- tot_sess-セッションの総数
- tot_cust-顧客の総数
- 1sess-1つのセッションのみのcustomer1
- 2sess-2セッションのお客様
- 3sess-3セッションのお客様
- 4sess-4セッションのお客様
- more4sess-4セッションを超えるお客様
- order1sess-最初のセッションで注文した顧客
- order2sess-2番目のセッションで注文した顧客
- order3sess-3番目のセッションで注文した顧客
- order4sess-4番目のセッションで注文した顧客
- orderMore4Sess-4回目のセッション後に注文した顧客
エントリ|tot_sess| tot_cust | 1sess | 2sess | 3sess | 4sess | more4sess | order1sess | order2sess | order3sess | order4sess | orderMore4Sess | 2012-08-01 | 8 | 4 | 2 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
次のクエリを使用して、セッションに関する情報をすでに取得できます。
SELECT
t.`date_entry`,
COUNT(sess) `cust`,
SUM(sess) `session`,
COUNT(IF(sess>1,sess,NULL)) `more than once`,
COUNT(IF(sess=1,sess,NULL)) `one`,
COUNT(IF(sess=2,sess,NULL)) `two`,
COUNT(IF(sess=3,sess,NULL)) `three`,
COUNT(IF(sess=4,sess,NULL)) `four`,
COUNT(IF(sess>4,sess,NULL)) `more`,
ROUND(COUNT(IF(sess>1,sess,NULL))/COUNT(sess),2) `perc > 1`,
ROUND(COUNT(IF(sess>2,sess,NULL))/COUNT(sess),2) `perc > 2`,
ROUND(COUNT(IF(sess>3,sess,NULL))/COUNT(sess),2) `perc > 3`,
ROUND(COUNT(IF(sess>4,sess,NULL))/COUNT(sess),2) `perc > 4`
FROM
(
SELECT
`customer_id`,
COUNT(`session`) `sess`,
DATE(`date_entry`) `date_entry`
FROM `customer_activity_log`
WHERE
`clicks` > 1
AND `customer_id` > 0
AND `date_entry` > '2012-08-01'
AND subsite_id <=1
GROUP BY `date_entry`, `customer_id`
) t
GROUP BY date_entry
それができたら、別の方法でデータを確認する必要があります。たとえば、顧客123が2012-01-01に初めて表示し、その後15回戻って、2012-08-に注文した場合です。 01その後、さらに5回戻ってきて、2012-10-12に別の注文を行いました。日付ではなく、顧客のみによるクエリが必要になります。つまり、制限date_entry
が解除されます。
私はそれが理にかなっていることを願っています