gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:03:46 25 4
gpt4 key购买 nike

我有这两个表: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;

这有效,但没有当前一周的 where 原因。

如果我这样做:选择 r.*, count(q.ritterID) from ritter as r left join quest as q on r.ritterID = q.ritterID where weekofyear(datum) = weekofyear(now())按 r.ritterID 分组;

然后它只显示在本周完成任务的 ritter,但我希望它显示所有 ritter。

输出:

情况如何:

enter image description here

它应该如何:

enter image description here

表格整理者:

enter image description here

和 table 任务:

enter image description here

我该如何解决这个问题?

我希望你能明白我的意思和我想要的。对不起我的英语。

最佳答案

您离解决方案不远了,只需将日期过滤器从 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

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

关于MySQL 如何在左连接中计算 where 子句仅用于计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39742972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com