問題

購買間隔の平均を求める。

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で割る。

  • SQL文
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回」という結果が出てしまう。

  • SQL文
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