2014-10-21 5 views
0

Я хочу рассчитать стандартное отклонение между просмотрами страниц на моем сайте. Я хотел бы сделать это, используя чистый MySQL - без запроса всей таблицы на веб-сервер - и вернуть один номер в код 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 относится к primary_key в таблице страниц, visitor_id относится к primary_key в таблице посетителей. Первичный ключ этой таблицы - это пара - page_id, так как одна и та же страница, которую видит тот же посетитель, записывается путем увеличения visit_count соответствующей строки вместо создания новой.

Перед вычислением стандартного отклонения, записи должны быть сгруппированы по page_id, их visit_count суммируется (visitor_id могут быть проигнорированы здесь), так что, по сути, я хочу, чтобы вычислить отклонение следующее:

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

Я знаю о возможных PHP-решениях, но меня интересует MySQL.

+0

Спасибо за ваши быстрый ответ. Я имел в виду ** стандартное отклонение **, как в математической статистике (дисперсия или отклонение от среднего). –

+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; 
+0

Я ценю ваш ответ, тот, который показывает подзапрос, _exactly_, что я искал. Если у вас есть рекомендации относительно того, как сделать вопрос более понятным для использования в будущем, пожалуйста, не стесняйтесь редактировать. –

0

Вы можете создать новую таблицу, в которой хранятся временные метки + текущие представления, чтобы вы могли просматривать историю изменений в представлениях. Вы сможете проверить последние две записи с меткой времени и насколько разница между ними, а также целая куча других вещей, о которых вы даже не подумали. Как графики. Или круговые диаграммы, показывающие активность в неделю. Mmmm pie.

+0

Я ценю ваш ответ, но это уже сделано, хотя совершенно по-другому. –

Смежные вопросы