这是我上一个问题的后续问题: SQL Query multiple sums and avarage of total
我得到了上一个问题与 Madhur Bhaiya 的回答:
SELECT SUM(h.hours) / COUNT(DISTINCT h.USER_ID) AS daily_average
FROM hours AS h
WHERE h.date = CURDATE()
虽然我意识到我有一个后续问题是:
在我的小时表中,我有两个用户报告了他们的时间,但我希望它能够计算所有存在的用户的平均值。 小时数据库如下所示:
#USER_ID #HOURS #DATE
1 2 2018-01-01
1 1 2018-01-01
2 5 2018-01-01
1 3 2018-01-02
2 8 2018-01-02
2 1 2018-01-02
该信息在我的“用户”数据库中,如下所示:
#USER_ID #USER_NAME
1 aaa
2 bbb
3 ccc
关于如何做到这一点的任何想法?我假设我必须加入表 'hours'
和 'users'
?
所需的输出将是(基于 2018-01-01):
(HIDDEN INFO: USER 1 TOTAL = 3)
(HIDDEN INFO: USER 2 TOTAL = 5)
(HIDDEN INFO: USER 3 TOTAL = 0)
**AVARAGE: 2,666666667**
最佳答案
SELECT SUM(h.hours) / COUNT(DISTINCT u.USER_ID) AS daily_average
FROM hours AS h
RIGHT JOIN users u ON h.USER_ID = u.USER_ID
WHERE h.date = CURDATE()
您不考虑没有记录任何时间的用户的问题是他们不存在于小时表中,因此使用小时表上不同用户的计数不是您要找的。
如果加入用户表,您可以获得系统中所有用户的计数,而不是未记录小时数的用户数,这应该为您提供所有用户的平均值,而不仅仅是记录小时数的用户数。
关于mysql - 总结用户小时数并得到平均值,包括尚未添加任何小时数的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606233/