这是我上一个问题的后续问题:sql查询多个sum和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**
3条答案
按热度按时间xurqigkl1#
你想要一个
LEFT JOIN
把这个条件放在医院里好几个小时ON
条款:以上是完全正确的。但是,只在上使用子查询可能更有效
users
:qncylg1j2#
使用左连接
bttbmeg03#
不考虑没有记录任何小时数的用户的问题是,这些用户在小时表中不存在,因此使用小时表中不同用户的计数并不是您想要的。
如果加入users表,则可以得到系统中所有用户的计数,而不是那些没有记录小时数的用户,这将得到所有用户的平均值,而不仅仅是记录小时数的用户。