MySQL如何在仅用于计数的where子句的左连接中计数?

Cih*_*hat 5 mysql join count

我有这两个表:ritter(ritterId, ritterName)quest(questID, ritterID, datum)

现在我的问题是,如何使用额外的列显示 ritter 中的所有内容,该列显示当前周 ritter 的任务数?

我试过这个:

select r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID group by r.ritterID;
Run Code Online (Sandbox Code Playgroud)

这有效,但没有本周的原因。

如果我做: select r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID where weekofyear(datum) = weekofyear(now()) group by r.ritterID;

然后它只显示在本周执行任务的 ritter,但我想它显示所有 ritter。

输出:

情况如何:

在此处输入图片说明

应该如何:

在此处输入图片说明

表里特:

在此处输入图片说明

和桌子任务:

在此处输入图片说明

我该如何解决这个问题?

我希望你能理解我的意思和我想要的。对不起我的英语不好。

Sha*_*dow 3

您距离解决方案并不遥远,只需将日期过滤器从 where 条件移至连接条件即可。这样,它仅适用于连接右侧的表,而不适用于整个结果集:

select r.*, count(q.ritterID)
from ritter as r left join quest as q
   on r.ritterID = q.ritterID and weekofyear(datum) = weekofyear(now())
group by r.ritterID
Run Code Online (Sandbox Code Playgroud)

由于 ritter name 在功能上依赖于 ritter id,因此您的查询在最新版本的 MySQL 上将没问题。only_full_group_by然而,在旧版本中,如果设置了 sql 模式,您可能会遇到麻烦。因此,最好将 r.ritterName 添加到 group by 子句中。