mysql - 如何计算平均值?

标签 mysql sql database join select

我有两张 table 。在第一个表(事件)中有:user_id、sessions 和 login_time。在第二个(付款)中只有一列 - user_id。

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

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
...

最佳答案

看着你的 sample
似乎您需要 session 总和除以总天数

  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

关于mysql - 如何计算平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136984/

相关文章:

mysql - SQL 表中的唯一交叉联接

c# - 数据阅读器与指定的不兼容,...在数据阅读器中没有同名的对应列

php - MYSQL和PHP如何在特定条件后显示数据

javascript - 制作日历的问题

PHP MySQL Web 服务器和 phpmyadmin 上的查询结果不同

mysql - 仅当值与多插入的前一条记录不同时才插入?

MySQL - 显示 SELECT 中的出现次数(计数)

mysql - 重新格式化 sql 以显示主查询返回 null 的行

sql - 我们可以使用 sql 列出 ms access 数据库中的所有表吗?

python - 用于保存数据的良好 Python 模块