Как рассчитать среднее значение? - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть две таблицы. В первую таблицу (активность) входят: user_id, session и login_time. Во второй (платежи) есть только один столбец - user_id.

Мне нужно подсчитать, сколько сеансов было выполнено пользователями из "платежей" в течение 01/01 / 2018-01 / 05/2018.

activity

user_id   sessions   login_time
1           6         01.01.2018
2           2         01.01.2018
1           1         02.01.2018
4           3         02.01.2018
1           2         03.05.2018
3                     04.02.2018

таблица

payments
user_id
1
3
4

Мой код (неверный расчет):

select login_time, avg(activity.sessions) AS
average_sessions
from activity inner join
payments
on payments.user_id = activity.user_id
where activity.login_time between '2018-01-01' and '2018-05-01' 
group by activity.login_time;

Спасибо за помощь!

Выход:

output
login_time    average_sessions
01.01.2018     6
02.01.2018     2
03.01.2018     0
04.01.2018     0
...

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Исходя из ожидаемого результата, используйте следующее:

SELECT login_time, 
       SUM(activity.sessions)/COUNT(DISTINCT activity.user_id) AS average_sessions
FROM activity 
INNER JOIN payments ON payments.user_id = activity.user_id
WHERE activity.login_time BETWEEN '2018-01-01' and '2018-05-01' 
GROUP BY activity.login_time;
0 голосов
/ 02 сентября 2018

ищет ваш образец
Кажется, вам нужна сумма сеанса, деленная на общее количество дней

  select  user_id, sum(sessions)/t.num_days
  from activity 
  cross join  (
  select count(distinct login_time) num_days
  from activity
  ) t 
  group by user_id  

и если вам нужен только user_id в платежах

  select  user_id, sum(sessions)/t.num_days
  from activity 
  cross join  (
  select count(distinct login_time) num_days
  from activity
  ) t 
  inner join  payments p on p.user_id = activity.user_id
  group by user_id  

и, глядя на ваш результат, кажется, вам нужно

  select t1. login_time, ifnull(t2.avg_sess) average_sessions
  from (
  select distinct login_time 
  from activity 
  ) t1  
  left join (
  select a.login_time, avg(a.session) avg_sess
  from activity a
  inner join payments p on a.user_id  = p.user_id
  group by a.login_time
  ) t2 on t1.login_time = t2.login_time
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...