如何获得分组行的标准偏差?

时间:2014-10-21 10:00:20

标签: php mysql

我想计算网站上的网页浏览量之间的标准差。我想使用纯MySQL执行此操作 - 无需将整个表查询到Web服务器 - 并将单个数字返回到PHP代码以供进一步使用。根据以下架构,每个页面视图都存储为visitor_id - page_id - visit_count三人组合:

 +============+=========+=============+
 | visitor_id | page_id | visit_count |
 +============+=========+=============+
 | 1          | 2       | 7           |
 +------------+---------+-------------+
 | 2          | 2       | 4           |
 +------------+---------+-------------+
 | 1          | 1       | 17          |
 +------------+---------+-------------+
 | 3          | 2       | 12          |
 +------------+---------+-------------+
 | 1          | 3       | 639478      |
 +------------+---------+-------------+
 | 2          | 1       | 6           |
 +------------+---------+-------------+

page_id引用pages表中的PRIMARY_KEY,visitor_id引用visitor表中的PRIMARY_KEY。上表的主键是visitor_id - page_id对,因为相同访问者看到的同一页面是通过增加相应行的visit_count来记录的,而不是创造一个新的。

在计算标准偏差之前,条目应按page_id分组,它们的visit_count求和(此处可以忽略visitor_id),因此,实际上,我想计算以下偏差:

 +=========+=============+
 | page_id | visit_count |
 +=========+=============+
 | 2       | 23          |
 +---------+-------------+
 | 1       | 23          |
 +---------+-------------+
 | 3       | 639478      |
 +---------+-------------+

我了解可能的PHP解决方案,但我对 MySQL 感兴趣。

2 个答案:

答案 0 :(得分:1)

如果您想要每页的标准偏差(即访客是人口):

select page_id, sum(visit_count) as visit_count, std(visit_count) as visit_std
from table1
group by page_id;

如果您想要页面上的标准偏差:

select std(visit_count) as page_std
from (select page_id, sum(visit_count) as visit_count
      from table1
      group by page_id
     ) t;

答案 1 :(得分:0)

您可以创建一个存储时间戳+当前视图的新表,以便查看视图中的更改历史记录。您可以查看最后两个带时间戳的条目,以及两者之间的差异以及您还未想到的其他一些东西。像图表一样。或者饼图显示活动每周增加。嗯馅饼。