Как найти AVG для пользователя, используя дату начала и за определенный период времени - PullRequest
0 голосов
/ 09 сентября 2018

Я хотел бы узнать средние покупки на пользователя, который присоединился, скажем, в марте за 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 голосов
/ 09 сентября 2018

Не уверен, правильно ли я понял, но вы можете сделать это, объединив два запроса, один на 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...