如何进行频道访问的总数

时间:2014-05-12 09:02:19

标签: mysql select count sum

我正在尝试为包含视频频道和这些频道订阅者详细信息的表的MySQL数据库设置一些查询。其中一个查询尝试列出所有现有频道以及任何订户访问每个频道的次数。在这个查询中,我不感兴趣的是哪个用户访问了一个频道,而只是所有频道的列表和每个频道的访问总时间。这可能是一个非常简单的查询,但我刚开始玩数据库,所以请不要爆炸我。 为此,我使用了两个表(简称):

CREATE TABLE channels (channel_id, channel_name, channel_descr);

CREATE TABLE channel_accesses (channel_id, subscriber_id, access_date, num_of_accesses);

我尝试从“频道”表格中选择所有channel_ids和名称,count()sum() num_of_accesses channel_access选择所有频道列表和名称,但我想出了一些有趣的结果因为我实际上不知道如何正确地把两者放在一起。在表channel_accesses中,num_of_accesses存储订户访问特定频道的次数。所以我需要的是以某种方式总计任何订阅者访问频道的次数(对不起,我想我在这里重复了一遍)。

1 个答案:

答案 0 :(得分:2)

这是一个非常简单的查询:

首先使用外键列(FROM)加入channel_id子句中的两个表。我们需要使用LEFT JOIN所以所有频道都出现在结果集中,即使那些没有订阅者和访问权限的频道也是如此。

FROM
    channels AS c
  LEFT JOIN 
    channel_accesses AS ca
      ON ca.channel_id = c.channel_id

然后我们按channels的主键分组,因为我们想要每个频道的结果:

GROUP BY
    c.channel_id, c.channel_name

最后,我们可以SELECT channels我们想要的列SUMnum_of_accesses COALESCE()的聚合。添加了SELECT c.channel_id, c.channel_name, COALESCE(SUM(ca.num_of_accesses), 0) AS total_num_of_accesses FROM channels AS c LEFT JOIN channel_accesses AS ca ON ca.channel_id = c.channel_id GROUP BY c.channel_id, c.channel_name ; 函数,因此对于没有订阅者的频道,我们得到0而不是空值:

{{1}}