Mysql SQL嵌套计数查询
我有这些桌子:Mysql SQL嵌套计数查询,mysql,sql,database,Mysql,Sql,Database,我有这些桌子: Discussion ---------- DiscussionID (Primary Key) Name .... UserDiscussion -------------- UserID (Primary Key) DiscussionID (Primary Key) Participated (Boolean) Bookmarked (Boolean) 我需要询问两件事: 某个用户参与的所有讨论 对于每个参与的讨论,我需要将讨论添加到书签的用户总数 以下是我当前的查询:
Discussion
----------
DiscussionID (Primary Key)
Name
....
UserDiscussion
--------------
UserID (Primary Key)
DiscussionID (Primary Key)
Participated (Boolean)
Bookmarked (Boolean)
我需要询问两件事:
SELECT d.DiscussionID, d.Name
FROM Discussion d LEFT JOIN
UserDiscussion ud ON ud.DiscussionID = d.DiscussionID
WHERE ud.UserID = 1 AND ud.Participated = true;
样本数据:
Discussion:
DiscussionID | Name |
---------------------
1 First
UserDiscussion:
UserID | DiscussionID | Participated | Bookmarked |
===================================================
1 1 1 1
4 1 1 0
输出应如下所示:
讨论:[
{
讨论ID:1,
名称:“第一”,
书签计数:1
}
]您可以将in子句与子层、、和计数一起使用
SELECT a.DiscussionID, a.Name, b.count(*)
FROM discussion a
INNER JOIN UserDiscussion b
WHERE a.DiscussionID in (
SELECT d.DiscussionID
FROM Discussion d
INNER JOIN UserDiscussion ud ON ud.DiscussionID = d.DiscussionID
WHERE ud.UserID = 1 AND ud.Participated = true
)
AND b.Bookmarked = true;
group by a.DiscussionID, a.Name
听起来你有第一个查询,2d应该是这样的
SELECT DiscussionID, count(UserID)
FROM UserDiscussion
WHERE DiscussionID in (SELECT DiscussionID from UserDiscussion WHERE ud.UserID = 1 AND ud.Participated = true)
AND Bookmarked = true
GROUP BY DiscussionID;
最后你需要加入他们
与张贴的更正:
SELECT d.DiscussionID, d.Name, BookmarkCount
FROM Discussion d
JOIN UserDiscussion ud ON ud.DiscussionID = d.DiscussionID
JOIN (
SELECT DiscussionID as DID, count(UserID) as BookmarkCount
FROM UserDiscussion
WHERE DiscussionID in (SELECT DiscussionID from UserDiscussion WHERE
ud.UserID = 1 AND ud.Participated = true)
AND Bookmarked = true
GROUP BY DiscussionID
) ON d.DiscussionID=DID;
一种方法是编写一个包含书签次数的视图
创建或替换已添加书签的视图(
讨论会,
泰晤士报(书签)为
选择讨论id,计数(*)
来自用户讨论
其中Bookmarked=true
分组讨论\u id
然后在主查询中,左键连接到视图。您可以使用临时表获得与每个讨论ID相关的书签计数
select DiscussionID, count(Bookmarked) as 'Bookmarked'
into #Bookmarks
from UserDiscussion
group by DiscussionID
然后,将其连接到DiscussionID上的最后一个表,您可以将计数用作列
SELECT d.DiscussionID, d.Name, b.Bookmarked
FROM Discussion d LEFT JOIN
UserDiscussion ud ON ud.DiscussionID = d.DiscussionID
left join #Bookmarked b on ud.DiscussionID = b.DiscussionID
WHERE ud.UserID = 1 AND ud.Participated = true;
输出应该是什么样子?这是一个
mysql
问题还是postgresql
问题?或者您正在寻找这两个系统的答案?我更新了输出应该是DiscussionID
之后的where
正确,还是应该是d.DiscussionID
?
SELECT d.DiscussionID, d.Name, b.Bookmarked
FROM Discussion d LEFT JOIN
UserDiscussion ud ON ud.DiscussionID = d.DiscussionID
left join #Bookmarked b on ud.DiscussionID = b.DiscussionID
WHERE ud.UserID = 1 AND ud.Participated = true;