【问题标题】:How to find the AVG per user using a start date and for a specific period of time如何使用开始日期和特定时间段查找每个用户的 AVERAGE
【发布时间】:2018-09-09 09:47:43
【问题描述】:

我想知道在 3 月加入的每个用户在 4 个月和 6 个月内的平均购买量。答案应该给我两个数字

表 1(用户)列:

user_id
date_joined

表 2(购买)列:

purchase_id
purchase_amount
purchase_date
user_id

我的初始代码是:

SELECT U.USER_ID, AVG(PURCHASES.PURCHASE_AMOUNT)
  FROM USERS U
 INNER JOIN PURCHASES P
    ON U.USER_ID = P.USER_ID
 WHERE P.PURCHASE_DATE >= U.DATE_OF_JOIN AND MONTH(P.purchase_date) = 03
   AND P.PURCHASE_DATE < DATE_ADD(U.DATE_OF_JOIN, INTERVAL 6 MONTH)
 GROUP BY U.USER_ID;

问题是它给了我每个用户的平均值(我有 20 个用户,所以它给了我 20 个数字)。当我需要两个但不知道如何包含它时,此代码只包含一个间隔。

【问题讨论】:

  • 添加SQL标签,让更多人看到您的问题,您将获得更多答案。

标签: mysql sql join


【解决方案1】:

不确定我是否理解得很好,但您可以通过“合并”两个查询来做到这一点,一个为 4 个月,另一个为 6 个月。

而且,如果您希望每个持续时间都有一个值,那么您不需要按用户分组。

查询应该类似于:

SELECT 4 as months, AVG(PURCHASES.PURCHASE_AMOUNT) as average_amount
  FROM USERS U
 INNER JOIN PURCHASES P
    ON U.USER_ID = P.USER_ID
 WHERE P.PURCHASE_DATE >= U.DATE_OF_JOIN AND MONTH(P.purchase_date) = 03
   AND P.PURCHASE_DATE < DATE_ADD(U.DATE_OF_JOIN, INTERVAL 4 MONTH)
union all
SELECT 6 as months, AVG(PURCHASES.PURCHASE_AMOUNT) as average_amount
  FROM USERS U
 INNER JOIN PURCHASES P
    ON U.USER_ID = P.USER_ID
 WHERE P.PURCHASE_DATE >= U.DATE_OF_JOIN AND MONTH(P.purchase_date) = 03
   AND P.PURCHASE_DATE < DATE_ADD(U.DATE_OF_JOIN, INTERVAL 6 MONTH)
 GROUP BY U.USER_ID;

【讨论】:

    猜你喜欢
    • 2020-12-02
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 2021-01-02
    相关资源
    最近更新 更多