首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从包含多个表的查询中创建非重复计数

如何从包含多个表的查询中创建非重复计数
EN

Stack Overflow用户
提问于 2021-01-26 19:00:52
回答 2查看 34关注 0票数 0

我正在尝试创建一个查询,该查询将为ActivityID和CommentID提供不同的计数。我在MS Access中的查询如下所示:

代码语言:javascript
复制
SELECT 
    tbl_Category.Category, Count(tbl_Activity.ActivityID) AS CountOfActivityID, 
    Count(tbl_Comments.CommentID) AS CountOfCommentID
FROM tbl_Category LEFT JOIN 
    (tbl_Activity LEFT JOIN tbl_Comments ON 
        tbl_Activity.ActivityID = tbl_Comments.ActivityID) ON 
        tbl_Category.CategoryID = tbl_Activity.CategoryID
WHERE 
    (((tbl_Activity.UnitID)=5) AND ((tbl_Comments.PeriodID)=1))
GROUP BY 
    tbl_Category.Category;

我知道答案一定包括SELECT DISTINCT,但我不能让它工作。我需要创建多个子查询吗?

EN

回答 2

Stack Overflow用户

发布于 2021-01-26 19:48:07

这在MS Access中是非常痛苦的。我认为以下是您想要做的事情:

代码语言:javascript
复制
SELECT ac.Category, ac.num_activities, aco.num_comments
FROM (SELECT ca.category, COUNT(*) as num_activities
      FROM (SELECT DISTINCT c.Category, a.ActivityID
            FROM (tbl_Category as c INNER JOIN
                  tbl_Activity as a
                  ON c.CategoryID = a.CategoryID 
                 ) INNER JOIN
                 tbl_Comments as co
                 ON a.ActivityID = co.ActivityID
            WHERE a.UnitID = 5 AND co.PeriodID = 1
           ) as caa
      GROUP BY ca.category
     ) as ca LEFT JOIN
     (SELECT c.Category, COUNT(*) as num_comments
      FROM (SELECT DISTINCT c.Category, co.CommentId
            FROM (tbl_Category as c INNER JOIN
                  tbl_Activity as a
                  ON c.CategoryID = a.CategoryID
                 ) INNER JOIN
                 tbl_Comments as co
                 ON a.ActivityID = co.ActivityID
            WHERE a.UnitID = 5 AND co.PeriodID = 1
           ) as aco
      GROUP BY c.Category
     ) as aco
     ON aco.CommentId = ac.CommentId

请注意,您的LEFT JOIN是多余的,因为WHERE子句将它们转换为INNER JOIN,这将为此调整逻辑。过滤也非常棘手,因为它同时使用两个表,要求两个子查询都有两个JOIN

票数 1
EN

Stack Overflow用户

发布于 2021-01-26 19:03:29

您可以使用DISTINCT:

代码语言:javascript
复制
SELECT 
    tbl_Category.Category, Count(DISTINCT tbl_Activity.ActivityID) AS CountOfActivityID, 
    Count(DISTINCT tbl_Comments.CommentID) AS CountOfCommentID
FROM tbl_Category LEFT JOIN 
    (tbl_Activity LEFT JOIN tbl_Comments ON 
        tbl_Activity.ActivityID = tbl_Comments.ActivityID) ON 
        tbl_Category.CategoryID = tbl_Activity.CategoryID
WHERE 
    (((tbl_Activity.UnitID)=5) AND ((tbl_Comments.PeriodID)=1))
GROUP BY 
    tbl_Category.Category;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65900081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档