Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何计算平均值?_Mysql_Sql_Database_Join_Select - Fatal编程技术网

Mysql 如何计算平均值?

Mysql 如何计算平均值?,mysql,sql,database,join,select,Mysql,Sql,Database,Join,Select,我有两张桌子。在第一个表(活动)中有:用户id、会话和登录时间。在第二列(付款)中,只有一列-user\u id 我需要计算“付款”用户在2018年1月1日至2018年5月1日期间进行了多少次会话 activity user_id sessions login_time 1 6 01.01.2018 2 2 01.01.2018 1 1 02.01.2018 4

我有两张桌子。在第一个表(活动)中有:用户id、会话和登录时间。在第二列(付款)中,只有一列-user\u id

我需要计算“付款”用户在2018年1月1日至2018年5月1日期间进行了多少次会话

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
桌子

我的代码(计算错误):

谢谢你的帮助

输出:

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

期待您的样品
似乎您需要会话总数除以总天数

  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  
如果您只需要支付中的用户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

根据您的预期输出,使用以下选项:

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;

同时给出您的预期输出!问题有点不清楚,没有预料到output@MadhurBhaiya,我更新了你在计算每个用户的平均会话吗?@Madhur Bhaiya,是的。第二个表中的每个用户将
avg(activity.sessions)
替换为
SUM(activity.sessions)/COUNT(DISTINCT activity.user\u id)
谢谢,但我只需要按日期计算第二个表中每个用户的平均会话。我怎么做?好的,但我需要一个两列的表格。一列是日期(2018年4月1日,2018年4月2日…),另一列是仅针对付费用户的会话数量。请回答更新后的@Ббббббббббasnwer。。根据你的结果。。希望就是你寻找的汉克。但我认为它从所有用户会话中搜索平均值,但我只需要从第二个表中搜索会话。@БСцццццццццццццццц109。它限制只能从
付款
表用户中考虑会话。您能解释一下为什么在这种情况下,avg()和“SUM(activity.sessions)/COUNT(DISTINCT activity.user\u id)”会给出不同的结果吗?DISTINCT确保不多次计算用户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
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;