求和用户小时数并获取平均值,包括尚未添加任何小时数的用户

b1zrtrql  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(246)

这是我上一个问题的后续问题: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**
xurqigkl

xurqigkl1#

你想要一个 LEFT JOIN 把这个条件放在医院里好几个小时 ON 条款:

SELECT SUM(h.hours) / COUNT(DISTINCT u.user_id) as daily_average 
FROM users u LEFT JOIN
     hours h
     ON h.user_id = u.user_id and h.date = CURDATE();

以上是完全正确的。但是,只在上使用子查询可能更有效 users :

SELECT SUM(h.hours) / (SELECT COUNT(*) FROM users) as daily_average 
FROM hours h
WHERE h.date = CURDATE();
qncylg1j

qncylg1j2#

使用左连接

select SUM(h.hours) / COUNT(DISTINCT users.USER_ID) AS daily_averag
from users left join hours on users.USER_ID=hour.user_id
bttbmeg0

bttbmeg03#

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()

不考虑没有记录任何小时数的用户的问题是,这些用户在小时表中不存在,因此使用小时表中不同用户的计数并不是您想要的。
如果加入users表,则可以得到系统中所有用户的计数,而不是那些没有记录小时数的用户,这将得到所有用户的平均值,而不仅仅是记录小时数的用户。

相关问题