Sql 如何计算这些数字

Sql 如何计算这些数字,sql,sql-server,Sql,Sql Server,我想计算一下我在数据库中对特定帖子的喜好,我创建了一个简单的查询,显示了我对一个资源“帖子”有多少喜好,但当我添加到主脚本时,它就错过了 SELECT COUNT(Likes.resourceID) AS Count_resID, Resources.Id FROM Likes INNER JOIN Resources ON Likes.resourceID = Resources.Id GROUP BY Resources.I

我想计算一下我在数据库中对特定帖子的喜好,我创建了一个简单的查询,显示了我对一个资源“帖子”有多少喜好,但当我添加到主脚本时,它就错过了

SELECT     COUNT(Likes.resourceID) AS Count_resID, Resources.Id
FROM         Likes INNER JOIN
                      Resources ON Likes.resourceID = Resources.Id
GROUP BY Resources.Id

Result 
Count_resID Id
----------- -----------
1           53
2           54
2           60
2           61
1           62

(5 row(s) affected)
SELECT     a.Id, a.summary, a.pageId, a.name, a.createdOn, COUNT(Likes.resourceID) AS Count_resID
FROM         Resources AS a INNER JOIN
                      Topics_Resources AS b ON a.Id = b.ResourceID INNER JOIN
                      Skills_Resources AS c ON a.Id = c.ResourceID INNER JOIN
                      Types AS d ON a.typeId = d.Id INNER JOIN
                      Modules AS m ON a.ModuleId = m.ModuleID INNER JOIN
                      ContentItems AS ci ON m.ModuleID = ci.ModuleID INNER JOIN
                      Tabs AS t ON t.TabID = ci.TabID INNER JOIN
                      TabModules AS tb ON t.TabID = tb.TabID INNER JOIN
                      Likes ON a.Id = Likes.resourceID LEFT OUTER JOIN
                      HtmlText AS h ON tb.ModuleID = h.ModuleID
GROUP BY a.Id, a.summary, a.pageId, a.name, a.createdOn 
Id          summary                             pageId                                                            name           createdOn                 Count_resID
----------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------
53          jihuih                               http://localhost/ideapark/testpage99.aspx                        jklhjk         2013-05-10 07:24:21.833    12
54          1                                    http://localhost/ideapark/testpage33.aspx                        sdvs           2013-05-09 07:24:21.833    2
60          sdvsdv                               http://localhost/ideapark/tesCreatedate.aspx                     dsvsdv         2013-05-13 07:32:13.133    8
61          newtest                              http://localhost/ideapark/newtest.aspx                           newTest       2013-05-13 10:35:08.027     2
62          sdvsdvds                             http://localhost/ideapark/page21.aspx                            svdsvs        2013-05-14 14:06:15.603     35

(5 row(s) affected)

根据您的结果更改,您用于联接表的条件之一存在问题。必须确保join all中的表与基表的比率为1:1

问题是您正在连接多个表,并且其中多个表具有1-n关系。你得到的是笛卡尔积,而不是你所期望的

解决这个问题的正确方法是在加入之前进行子查询以进行汇总

但是,您确实可以使用
count(distinct)
快速简便地解决此问题。改用此
选择
语句:

SELECT     a.Id, a.summary, a.pageId, a.name, a.createdOn,
           COUNT(distinct Likes.Id) AS Count_resID;
这假设
likes
中的每个记录都有一个
id
来唯一地标识它

修复此问题的更好方法(特别是如果此查询将被重新使用)包括将
连接从以下位置更改:

                  TabModules AS tb ON t.TabID = tb.TabID INNER JOIN
                  Likes ON a.Id = Likes.resourceID LEFT OUTER JOIN
例如:

                  . . .
                  TabModules AS tb ON t.TabID = tb.TabID INNER JOIN
                  (select l.resourceId, count(*) as NumLikes
                   from Likes l
                  ) l ON a.Id = l.resourceID LEFT OUTER JOIN
                  . . .
然后在
select
子句中引用
NumLikes