簡體   English   中英

計算兩個MySQL表中發布和第一次評論之間的平均時間

[英]Calculate average time between post and first comment in two MySQL tables

我面對這個(至少對我來說)挑戰:

我在那里的帖子都存儲在表中的論壇posts和評論表comments 發布后,時間戳記將存儲在INT(11) posts.created_at列中。 與注釋相同...進行注釋時,帶有注釋的時間戳記存儲在comments.created_at

但是,現在我想知道第一條評論顯示的平均時間(以秒為單位)。 當然,如果沒有給出評論,則不應將其納入平均值。

這可以在一個SQL查詢中完成嗎? 如果沒有,如何用最少的查詢量完成呢?

希望你有一個想法,因為我沒有。

如果您使用日期字段作為日期字段,那么類似於:

SELECT AVG(
           DATEDIFF(MIN(comments.created_at), posts.created_at)
          ) 
FROM posts 
INNER JOIN comments on comments.post_primary_key = posts.primary_key

應該得到你需要的東西

但是,正如注釋中所指出的那樣,您並未將日期存儲為日期,請記住嘗試:

SELECT AVG(
           MIN(comments.created_at) - posts.created_at
          ) 
FROM posts 
INNER JOIN comments on comments.post_primary_key = posts.primary_key

為了完整性-我的最新建議...您可以嘗試以下方法:

SELECT AVG( sub.timeToComment ) 
FROM ( 
       SELECT MIN(comments.created_at) - posts.created_at as timeToComment 
       FROM posts 
       INNER JOIN comments on comments.post_primary_key = posts.primary_key
     ) as sub

但不確定與@Xophmeister方法有何不同

select   posts.id,
         avg(comments.created_at - posts.created_at)
from     posts
join     comments
on       comments.id = posts.id
group by posts.id;

這假設MySQL將正確處理日期時間算法。

編輯正如@MattFellows指出的那樣,這個查詢是不正確的,因為它通過郵寄分組; 無論我是否使用min(comments.created_at) ,都不要。 實際上,它將返回的結果是完全多余的:對於min ,它將是每個帖子與其第一個評論之間的時間; 沒有min ,這是帖子和所有評論之間的平均時間(這是一個相當虛假的指標!)...我垂頭喪氣:P

正確的查詢是:

select avg(min(comments.created_at) - posts.created_at)
from   posts
join   comments
on     comments.id = posts.id;

雖然,這也是時間戳是數字的地方,而不是日期時間,顯然,MySQL沒有重載運算符。

希望這對你有用:

select   avg(first_comments.first_time - posts.created_at)
from     posts
join    (select   comments.post_id
                  min(comments.created_at) as first_time
         from     comments
         group by post_id) as first_comments
on       first_comments.post_id = posts.id;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM