我有一个名为sales
的表格,格式如下。
sale_id user_id sale_date sale_cost
j847bv-6ggd bd48ta36-cn5x 2017-01-10 15:43:12 30
vf87x2-15gr bd48ta36-cn5x 2017-01-05 13:41:16 60
3gfd7f-2cdd 8g4f5ccf-1fet 2017-01-15 14:10:12 100
4bgfd5-12vn 8g4f5ccf-1fet 2017-01-20 19:47:14 20
b58e32-bf87 8g4f5ccf-1fet 2017-01-20 17:35:13 15
bg87db-127g gr4gg1f4-3gbb 2017-01-20 12:26:15 80
我如何获得用户(user_d
)在首次购买后的前X天内花费的平均金额?我不想要每个用户的平均值,而是所有用户的平均值。
我知道我可以使用select avg(sale_cost)
获得平均值,但我不确定如何找出日期的平均值。
答案 0 :(得分:2)
您可以在初始销售日期的10天日期范围内找到每个用户的平均总数,如下所示:
select avg(sale_cost)
from (
select sum(t.sale_cost) sale_cost
from your_table t
join (
select user_id, min(sale_date) start_date, date_add(min(sale_date), interval 10 day) end_date
from your_table
group by user_id
) t2 on t.user_id = t2.user_id
and t.sale_date between t2.start_date and t2.end_date
group by t.user_id
) t;
它为每个用户找到第一个sale_date和10天后的日期。然后将其与表格连接,以获得该范围内每个用户的总数,然后最终计算上述总计的平均值。
如果您想查找整体首次sale_date(非个人)与10天之间的平均值,请使用:
select avg(sale_cost)
from (
select sum(t.sale_cost) sale_cost
from your_table t
join (
select min(sale_date) start_date, date_add(min(sale_date), interval 10 day) end_date
from your_table
) t2 on t.sale_date between t2.start_date and t2.end_date
group by t.user_id
) t;
答案 1 :(得分:0)
在检查范围
时,between运算符会派上用场SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
在这种情况下,value1和value2将被您的日期替换为:
'2011-01-01 00:00:00' AND '2011-01-31 23:59:59'
或
sale_date AND DATE_ADD(OrderDate,INTERVAL 10 DAY)
第一种方式更快,而且值之间也是包容性的。