现在是早上 04.17,我不知道出了什么问题!请帮忙!
我在表 user_logs 中有包含此类列的表:
id | user_id | action | reference | time
----------------------------------------
1 | 1 | login | 0 | 1333800404
2 | 1 | logout | 1 | 1333800424
3 | 1 | login | 0 | 1333800434
4 | 1 | logout | 3 | 1333800444
并查询:
SELECT reference r,
sum(time-(SELECT time FROM users_logs WHERE id = r)) time_of_logon
FROM users_logs
WHERE user_id = 1 AND action = 'logout'
不幸的是 sum() 函数返回意外的值。
如果我删除 sum() 我会得到这样的查询:
SELECT reference r,
(time-(SELECT time FROM users_logs WHERE id = r)) time_of_logon
FROM users_logs
WHERE user_id = 1 AND action = 'logout'
结果:
r | time_of_logon
-----------
1 | 20
3 | 10
正如预期的那样 - 我打印了所有行,其中 user_id = 1 的操作“注销”从我从子查询获得的时间(登录时间与注销连接)减少了注销时间。现在我有时间用户登录了。到目前为止一切都很好。现在,当我添加总和(如在第一个查询中)时,我希望 time_of_logon 的总和(应该是 30)。如果我使用 avg 函数而不是 sum 我会期望 15 ((10+20)/2)。
总和版本:我得到 60, 平均版本- 我得到 30。
“时间”字段的类型是整数。
我的猜测: 我猜 mysql 以某种方式返回的不是 2 行,但它正在处理 4 行,或者将主查询下的一些计算加倍。因为 - avg 和 sum 结果都是应有的两倍。
也许这是我的大脑不再工作的时间问题,但我无法弄清楚出了什么问题。请帮忙。