2013-11-01 218 views
0

我需要一个SQL查询的帮助。我想统计两个表中的条目数。我的第一张名为tracking_adspace_views的表格从我制作的广告空间的每个视图中获得了条目。在一天结束时,我想要统计我有多少日子。第二个表tracking_clicks计算特殊广告空间上的点击次数。因此,并非每个被查看的广告空间都有点击。所以在最后我想是这样连接左外连接的两个表中计数

  • Adspace编号1有500次和3次点击
  • Adspace标识2 HAST 340次和0点击
  • 等等...

我的表看起来像这样

tracking_adspace_views

enter image description here

tracking_clicks

enter image description here

我的查询看起来是这样的:

SELECT '2013-10-31', 
     views.tracking_adspace, 
     COUNT(views.tracking_adspace) AS tracking_adspace_views,       
     COUNT(clicks.tracking_adspace) AS tracking_adspace_clicks 
FROM views 
LEFT JOIN (
      SELECT tracking_adspace, 
        COUNT(sub_c.tracking_adspace) AS tracking_adspace_clicks 
      FROM tracking_clicks as sub_c 
      GROUP BY sub_c.tracking_adspace 
     ) AS clicks 
     ON clicks.tracking_adspace = views.tracking_adspace 
WHERE views.tracking_time LIKE '2013-10-31%' 
GROUP BY views.tracking_adspace 

计数的意见的权利,并在那里点击次数0也算正确。但是如果在点击列中有点击,我会从视图中获取值。您的帮助:)

问候

+0

我觉得你的问题是不是真的清楚,什么样的结果,你希望和你怎么弄? – mucio

+0

为什么在这里使用'LIKE'通配符 - 'tracking_time LIKE'2013-10-31%'' –

回答

0

你出现由于从将被加入复制行做一个值的计数。

尝试这样: -

SELECT '2013-10-31' AS TrackingDate, 
     views.tracking_adspace, 
     COUNT(views.tracking_adspace) AS tracking_adspace_views,       
     clicks.tracking_adspace_clicks 
FROM views 
LEFT JOIN 
(
    SELECT tracking_adspace, 
      DATE(tracking_time) AS TrackingDate, 
      COUNT(tracking_adspace) AS tracking_adspace_clicks 
    FROM tracking_clicks 
    GROUP BY tracking_adspace 
) AS clicks 
ON clicks.tracking_adspace = views.tracking_adspace 
AND DATE(views.tracking_time) = clicks.TrackingDate 
WHERE DATE(views.tracking_time) = '2013-10-31' 
GROUP BY TrackingDate, views.tracking_adspace, clicks.tracking_adspace_clicks 
0

我希望你有一个名为tracking_adspaces什么的第三个表,一个名为tracking_adspace主键。如果你这样做,你可以这样做:

select '2013-10-13' as TrackingDate, 
     A.tracking_adspace 
     V.views, 
     C.clicks 
from tracking_adspaces A 
left join (
     select tracking_adspace, count(tracking_id) as views 
     from views 
     where DATE(tracking_time) = '2013-10-31' 
     group by tracking_adspace 
) V on A.tracking_adspace = V.tracking_adspace 
left join (
     select tracking_adspace, count(tracking_id) as clicks 
     from tracking_clicks 
     where DATE(tracking_time) = '2013-10-31' 
     group by tracking_adspace 
) C on A.tracking_adspace = C.tracking_adspace 

如果没有,你可以使用

select '2013-10-13' as TrackingDate, 
     distinct(A.tracking_adspace) 
     V.views, 
     C.clicks 
from views A 
left join ( 
(etc)