如何使用开始日期和特定时间段为每个用户查找AVG

时间:2018-09-08 23:20:29

标签: mysql sql join

我想找出在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个数字)。而且此代码仅在需要两个间隔但不知道如何包含一个间隔时才包含一个间隔。

1 个答案:

答案 0 :(得分:0)

不确定我是否理解得很好,但是您可以通过“联合”两个查询来做到这一点,一个查询为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;