2011-01-05 87 views
0
SELECT  projectID, urlID, COUNT(1) AS totalClicks, projectPage, 
          (SELECT  COUNT(1) 
          FROM   tblStatSessionRoutes, tblStatSessions 
          WHERE  tblStatSessionRoutes.statSessionID = tblStatSessions.ID AND tblStatSessions.projectID = tblAdClicks.projectID AND 
                (tblStatSessionRoutes.leftPageID = tblAdClicks.projectPage OR 
                tblStatSessionRoutes.rightPageID = tblAdClicks.projectPage)) AS totalViews 
FROM   tblAdClicks 
GROUP BY projectID, urlID, projectPage 
ORDER BY projectID, urlID 

tblProjects有一个字段的用户ID,我需要这个查询只显示记录,其中的项目有用户ID = 5,以便不显示来自所有用户的所有项目,所有的统计数据SQL帮助 - 通过用户ID过滤

+0

你在哪里使用上述查询中的表tblProjects? – 2011-01-05 16:29:23

+0

我不是,但我在我的一天结束时有一个大脑放屁,并且无法弄清楚如何在 – 2011-01-05 16:30:33

+0

中找到它,那么tblProjects.userID和其他tblAdClicks之间的关系是什么? – Mikhail 2011-01-05 16:33:06

回答

2

天真:

SELECT  projectID, urlID, COUNT(1) AS totalClicks, projectPage, 
          (SELECT  COUNT(1) 
          FROM   tblStatSessionRoutes, tblStatSessions 
          WHERE  tblStatSessionRoutes.statSessionID = tblStatSessions.ID AND tblStatSessions.projectID = tblAdClicks.projectID AND 
                (tblStatSessionRoutes.leftPageID = tblAdClicks.projectPage OR 
                tblStatSessionRoutes.rightPageID = tblAdClicks.projectPage)) AS totalViews 
FROM   tblAdClicks 
WHERE projectID IN (SELECT projectID FROM tblProjects WHERE userID = 5) 
GROUP BY projectID, urlID, projectPage 
ORDER BY projectID, urlID 

但它可能是一个更好的加入。与往常一样,检查你的执行计划

+0

干杯!执行计划是什么意思? – 2011-01-05 16:34:07

+0

@Tom Gullen您使用的是什么RDBMS?在SQL Server中,您可以查看估计的和实际的执行计划是SSMS。 – 2011-01-05 16:40:58

1

好了,我不知道你有数据的结构,但如果不出意外,可以随时加入到下面的子查询:

select projectID from tblProjects where userID=5 

至于你应该使用什么列来加入,我不能告诉你,因为我不知道你的数据的具体情况。

+0

这将返回'NULL'或'5' – Mikhail 2011-01-05 16:37:02

+0

糟糕,我的意思是projectID。固定! – 2011-01-05 16:38:27