【问题标题】:How to calculate average result for certain date?如何计算某个日期的平均结果?
【发布时间】:2018-09-02 20:34:17
【问题描述】:

你能帮帮我吗?我有两张桌子。
进入第一个表(活动)有:user_id、sessions 和 login_time。
在第二个(付款)中只有一列 - user_id。

这是我的查询:

SELECT activity.login_time, activity.user_id, avg(activity.sessions) as 
user_sessions
FROM activity
inner JOIN payments ON payments.user_id = activity.user_id
WHERE activity.login_time ='2018-04-05' group by activity.user_id;

使用这个查询,我得到这样的表:

+------------+---------+---------------
| login_time | user_id | user_sessions
+------------+---------+---------------
| 2018-04-05 |     107 |       12.0000
| 2018-04-05 |     110 |        1.0000
| 2018-04-05 |     112 |        5.0000
| 2018-04-05 |     115 |        5.0000
| 2018-04-05 |     117 |        7.0000
| 2018-04-05 |     120 |        1.0000
| 2018-04-05 |     123 |        1.0000
...

我应该如何进行查询以获得平均值:

+------------+------------
| login_time | avg_user_sessions 
+------------+---------
| 2018-04-05 | 4,57

注意:困难在于 user_id 有重复

表格

user_id login_time  sessions
107 2018-04-05  12
110 2018-04-05  1
112 2018-04-05  5
115 2018-04-05  5
117 2018-04-05  7
120 2018-04-05  1
123 2018-04-05  1



user_id
107
107
107
110
112
115
115
117
120
123

【问题讨论】:

  • 为什么不能简单地按日期分组?请添加示例数据并说明查询应如何工作。
  • @Shadow,你能帮我在我的查询中修复它吗?

标签: mysql sql join select


【解决方案1】:

如果payments 表中有很多user_id 重复项,您可以尝试在user_id 中的payments 表中使用DISTINCT

但在你的情况下,你只能直接选择activity,不需要joinpayments,因为你没有从中得到任何列。

CREATE TABLE activity(
   login_time date,
   user_id int,
   sessions float
);

CREATE TABLE payments (
   user_id INT
);



INSERT INTO payments VALUES (107);
INSERT INTO payments VALUES (107);
INSERT INTO payments VALUES (110);
INSERT INTO payments VALUES (112);
INSERT INTO payments VALUES (115);
INSERT INTO payments VALUES (115);
INSERT INTO payments VALUES (117);
INSERT INTO payments VALUES (120);
INSERT INTO payments VALUES (123);





INSERT INTO activity VALUES ('2018-04-05',107,12);
INSERT INTO activity VALUES ('2018-04-05',110,1);
INSERT INTO activity VALUES ('2018-04-05',112,5);
INSERT INTO activity VALUES ('2018-04-05',115,5);
INSERT INTO activity VALUES ('2018-04-05',117,7);
INSERT INTO activity VALUES ('2018-04-05',120,1);
INSERT INTO activity VALUES ('2018-04-05',123,1);

查询 1

SELECT a.login_time, avg(a.sessions) as 
user_sessions
FROM activity a
inner JOIN (SELECT DISTINCT user_id FROM payments) p ON p.user_id = a.user_id
WHERE a.login_time ='2018-04-05' 
group by a.login_time

Results

| login_time |     user_sessions |
|------------|-------------------|
| 2018-04-05 | 4.571428571428571 |

【讨论】:

  • 谢谢,我试过了,但是这个查询也显示大列表。但我需要 1 个平均值
  • 好的,您能否提供一些表格中的示例数据,并向我们展示您对示例数据的预期结果
  • 结果必须是(根据我的例子):(12 + 1 + 5 + 5 + 7 + 1 + 1)/7= 4,57
  • 好的。但是这个表是由我的查询形成的,因为这个表的数据在两个不同的表中。那是困难
  • 现在这是我期望的结果,但实际结果更大,因为在第二个表中有重复(...
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2020-09-23
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多