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