三张表 用户,资源,任务表,主要字段如下,(时间的格式是时间戳,不用过多纠结)
user----userId ,username,group
res---resId,userId,create_time
mission ---mId,userId,create_time
现在要统计在某一时间段内,特定group人群的资源数和任务数量
注:不是所有人都有资源或者任务,但是要统计所有人,没有资源或任务的显示为0,这样的sql该怎么写
下面是我的sql
统计res
SELECT userId,userName,COUNT(resId) FROM user
LEFT JOIN res
ON user.userId
= res.userId
WHERE user.group
= xxx
AND res.create_time
BETWEEN 1567267200 AND 1578882077
GROUP BY user.userId
出现的问题:
很多用户没有资源就显示不出来了 sql哪里出现问题了
where条件的问题,where会对left join生成的数据做过滤
很多用户没有资源 => left join之后的数据res.create_time为null
那应该怎么改
就是查出来的只是有数据的,res不存在或者不在范围的不显示了
怎么写可以查出 userId,username,count(res) 的全部信息让res不存在显示为0
@大宇007:
SELECT user.userId,user.userName, ifnull(T.resCount, 0) as resCount FROM user
LEFT JOIN
(
SELECT userId,COUNT(resId) as resCount FROM user
LEFT JOIN res ON user.userId = res.userId
WHERE user.group = xxx
AND res.create_time BETWEEN 1567267200 AND 1578882077
GROUP BY user.userId
) as T ON T.userId = user.userId where user.group = xxx
要学会思考
@大志若愚: 谢谢,明白了