2013-09-29 8 views
1

Я пытаюсь вычислить средний пост за каждый час на каждый день, и я должен сделать это в течение 113 месяцев. В таблице Post есть атрибут timePosted, DatePosted и Text. Мне также нужно объединить два столбец и поток, потому что я хочу получить только номер категории 3.MySQL: Рассчитайте среднюю должность за каждый час за каждый день

Пока это запрос, который я сделал.

select datePost as daytime, 
    HOUR(timePost) as thehour, 
    count(TEXT) as thecount 
    from post, thread 
    where date(post.datePost) BETWEEN '2010-05-01' AND '2010-05-31' 
    and post.threadID = thread.threadID 
    and thread.CatID = 3 
    group by datePost, thehour 

выше подзапрос возвращает мне это:

daytime  thehour thecount 
'2010-05-01', '0',  '3' 
'2010-05-01', '1',  '16' 
'2010-05-01', '2',  '2' 
'2010-05-01', '4',  '1' 
'2010-05-01', '7',  '1' 

Я пытаюсь сделать среды, но вопрос в том, что он вернуть мне тот же номер thecount. Пример thecount является 3, то Avg вернуть мне 3.00000

Так что я пытаюсь получить этот результат:

daytime  thehour thecount  Avg 
'2010-05-01', '0',  '3'   # 
'2010-05-01', '1',  '16'   # 
'2010-05-01', '2',  '2'   # 
'2010-05-01', '4',  '1'   # 
'2010-05-01', '7',  '1'   # 

ответ

1

только группу по все, что нужно разделить на

select month(timePost), day(timePost), hour(timePost),avg(the_count) 
from 
(
    select datePost as the_day, 
    timePost, 
    count(TEXT) as the_count 
    from post, thread 
    where post.datePost = '2010-05-03' 
    and post.threadID = thread.threadID 
    and thread.CatID = 3 
    group by the_day,the_hour 
) s 
group by 1,2,3 

получить день недели как текст, используйте

case dayofweek(date) when 1 then 'sunday' when 2 then 'monday' .... end as dayofweek 

для дополнительного процента делают

select datePost as daytime, 
    HOUR(timePost) as thehour, 
    count(TEXT) as thecount, 
    count(TEXT)/thecount_daily as percent_this_hour 
    from post 
    inner join thread on post.threadID = thread.threadID 
    inner join ( select datePost as daytime_daily, 
       count(TEXT) as thecount_daily 
       from post inner join thread on post.threadID = thread.threadID 
       where date(post.datePost) BETWEEN '2010-05-01' AND '2010-05-31' 
       and thread.CatID = 3 
       group by datePost)daily on daily.daytime_daily=datepost 



    where date(post.datePost) BETWEEN '2010-05-01' AND '2010-05-31' 

    and thread.CatID = 3 
    group by datePost, thehour 

в среднем за час в этот период времени,

select datePost as daytime, 
    HOUR(timePost) as thehour, 
    count(TEXT) as thecount, 
    hourly_average 
    from post 
    inner join thread on post.threadID = thread.threadID 
    inner join ( select hour(timepost) as daytime_daily, 
       count(TEXT)/count(distinct datePost) as hourly_average 
       from post inner join thread on post.threadID = thread.threadID 
       where date(post.datePost) BETWEEN '2010-05-01' AND '2010-05-31' 
       and thread.CatID = 3 
       group by datePost)daily on daily.daytime_daily=hour(timepost) 



    where date(post.datePost) BETWEEN '2010-05-01' AND '2010-05-31' 

    and thread.CatID = 3 
    group by datePost, thehour 
+0

Спасибо за ответ. Извините, я не понимаю, что вы подразумеваете под расколом? –

+0

по месяцам, день, час. вы в основном «разделяете» сгруппированные строки на эти более мелкие группы. – AdrianBR

+0

Я сделал некоторые изменения выше запроса «где post.datePost BETWEEN» 2010-05-01 «AND» 2010-05-31 », и у меня есть проблема с avg функция. Я обновил проблему выше. Спасибо –

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