获取日期之间的总平均值

时间:2017-02-26 17:38:16

标签: mysql sql

我有一个名为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)获得平均值,但我不确定如何找出日期的平均值。

2 个答案:

答案 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天后的日期。然后将其与表格连接,以获得该范围内每个用户的总数,然后最终计算上述总计的平均值。

Demo

如果您想查找整体首次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;

Demo

答案 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) 第一种方式更快,而且值之间也是包容性的。