gpt4 book ai didi

MySQL 连接计数和位置

转载 作者:行者123 更新时间:2023-11-29 11:27:31 25 4
gpt4 key购买 nike

我想获取所有讨论并添加“已添加书签”列对于讨论为 true 的所有 UserDiscussion 行的计数。

Table: Discussion
-----------------
DiscussionID
Name
.....


Table: UserDiscussion
---------------------
UserID
DiscussionID
Bookmarked (Boolean)

这是我的查询,但不正确:

SELECT d.*, COUNT(*) as BookmarkCount
FROM Discussion d
LEFT JOIN UserDiscussion ud
ON ud.DiscussionID = d.DiscussionID
WHERE ud.Bookmarked = true;

最佳答案

正确的写法是:

SELECT d.*, COUNT(ud.DiscussionID) as BookmarkCount
FROM Discussion d LEFT JOIN
UserDiscussion ud
ON ud.DiscussionID = d.DiscussionID AND
ud.Bookmarked = true
GROUP BY d.DiscussionId;

变化是:

  • 对第二个表中的字段使用 COUNT()。这将计算匹配的数量。在这种情况下,COUNT(*) 永远不会返回 0(该组将被过滤掉)。
  • WHERE 条件移至 ON 子句。否则,WHERE 条件将过滤掉 NULL 值,将 LEFT JOIN 转换为内部联接。
  • 添加 GROUP BY 子句,以便每个讨论 ID 获得一行。

注意:按 DiscussionId 分组是可以的,假设它是 Discussion 上的主键。一般来说,最好将 GROUP BY 中的 SELECT 中的所有未聚合列包含在内。但当 GROUP BY 使用主键/唯一键时,就可以了(并且符合 ANSI SQL)。

关于MySQL 连接计数和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37950680/

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