【问题标题】:Count in two tables connected with left outer join在两个用左外连接连接的表中计数
【发布时间】:2013-11-01 09:33:34
【问题描述】:

我需要一些关于 SQL 查询的帮助。我想计算 2 两个表中的条目数。我的第一个名为 tracking_adspace_views 的表从我制作的 Adspace 的每个视图中获取条目。在一天结束时,我想计算我最后一天有多少条目。第二张表tracking_clicks 统计了特殊广告空间的点击次数。因此,并非每个被查看的广告空间都有点击。所以最后我想要类似的东西

  • 广告空间 ID 1 有 500 次查看和 3 次点击
  • Adspace Id 2 拥有 340 次查看和 0 次点击
  • 等等……

我的桌子是这样的

tracking_adspace_views

tracking_clicks

我的查询如下所示:

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 的位置也计算正确。但是,如果点击列中有点击,我会从视图中获得价值。感谢您的帮助:)

问候

【问题讨论】:

  • 我觉得你的问题不是很清楚,你期待什么样的结果,你会得到什么?
  • 为什么在这里使用LIKE 通配符 - tracking_time LIKE '2013-10-31%'

标签: mysql sql count left-join


【解决方案1】:

您似乎正在对将被连接重复的行中的值进行计数。

试试这样的:-

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

【讨论】:

    【解决方案2】:

    我希望您有第三个表名为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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多