問題
購買間隔の平均を求める。
Sales(customer_name,sale_date)
サンプルデータ:
customer_name | sale_date |
--------------+--------------+-
'Fred' | '1994-06-01' |
'Mary' | '1994-06-01' |
'Bill' | '1994-06-01' |
'Fred' | '1994-06-02' |
'Bill' | '1994-06-02' |
'Bill' | '1994-06-03' |
'Bill' | '1994-06-04' |
'Bill' | '1994-06-05' |
'Bill' | '1994-06-06' |
'Bill' | '1994-06-07' |
'Fred' | '1994-06-07' |
'Mary' | '1994-06-08' |
satomiの解答
(1)customer_nameでグループ化
(2)日付を数値に直し(DAY)最後の購買日から最初の購買日を引く。
(3)購買した回数-1で割る。
selectcustomer_name,
(MAX(DAY(sale_date))-MIN(DAY(sale_date)))/(count(*)-1)as average
from Sales
group by customer_name;
+---------------+---------+
| customer_name | average |
+---------------+---------+
| Bill | 1.0000 |
| Fred | 3.0000 |
| Mary | 7.0000 |
+---------------+---------+
chiakiの解答
(1)売上記録の(最後の日ー最初の日)を計算することで、売上記録のある日数を計算する。
(2)全体の日数を、個人各々が(購買した回数-1)で割ることで、購買周期を求める。
注)ただ購買した回数で割ってしまうと、例えばMaryは8日間の中で2日間購買したことになるので、「購買周期は4日に1回」という結果が出てしまう。
SELECT customer_name,(max(sale_date)-min(sale_date))/(count(*)-1) as interval
FROM sales
GROUP BY customer_name;
+---------------+----------+
| customer_name | interval |
+---------------+----------+
| Fred | 3 |
| Mary | 7 |
| Bill | 1 |
+---------------+----------+
最終更新:2008年05月14日 11:36