2

如果不是数字,有没有办法获得平均数量?
我的桌子:

ID|  CAT  |  TITLE  |     DATE            |
--|-------|---------|---------------------|
1 | CAT01 | TITLE01 | 2013-01-18 20:37:15 |
2 | CAT01 | TITLE02 | 2013-01-18 20:37:16 |
3 | CAT02 | TITLE03 | 2013-01-19 12:09:54 |

我怎样才能获得每天帖子的 AVG?
现在我正在使用这个:

SELECT AVG(cat) / DATEDIFF('2013-01-19', '2013-01-18') as average 
FROM posts 
WHERE date BETWEEN '2013-01-18' AND '2013-01-19'"

但对我来说,它不会返回平均计数。也许我应该先 count(cat) AS cnt 然后使用 avg(cnt) AS 平均值?
还是不能在非数字表上使用 AVG?

4

5 回答 5

3

您可以一步完成。可以在此处找到经过测试的示例:http ://sqlfiddle.com/#!2/05760/12

SELECT 
  COUNT(*) / 
  COUNT(DISTINCT cast(`date` as date)) avg_posts_per_day
FROM 
  posts

或者您可以分两步执行此操作:

  1. 每天获得帖子,
  2. 平均第 1 步的结果。

可以在此处找到经过测试的示例:http ://sqlfiddle.com/#!2/05760/4

SELECT 
  AVG(posts_per_day) AS AVG_POSTS_PER_DAY
FROM (    
  SELECT 
    CAST(`date` as date), 
    COUNT(*) posts_per_day
  FROM posts  
  GROUP BY 
    CAST(`date` as date)
) ppd
于 2013-01-30T18:09:52.070 回答
0

试试这个

   SELECT COUNT(cat)/2  as avrag
   FROM posts 

演示 SQLFIDDLE

编辑:

如果你想使用两个日期之间的平均值,只需添加这个

     where date between 'the_date1' AND 'the_date2'
于 2013-01-30T18:06:41.563 回答
0

您可以做的是获取总帖子数,自数据库中第一个时间戳以来的天数,并根据这两个数字计算平均值。

于 2013-01-30T18:16:14.227 回答
0

我想你只需要用 来计算行数COUNT(*),然后在 datediff 中加 1:

SELECT COUNT(*) / (DATEDIFF('2013-01-19', '2013-01-18')+1) as average 
FROM posts 
WHERE DATE(date) BETWEEN '2013-01-18' AND '2013-01-19'

这将返回平均帖子数,计算没有帖子的天数。

或者,根据您所追求的,您可能会考虑这样的事情:

SELECT
  COUNT(*) /
  (datediff(max(`date`), min(`date`))+1) as avg_posts
FROM
  posts
于 2013-01-30T18:28:30.767 回答
0

试试这个,格式化日期 yyyy-MM-dd 来计算每天的所有帖子,然后取每天的平均值

SELECT 
   amount/total AS AVG_POSTS_PER_DAY, day
FROM
  (
    SELECT COUNT(1) amount, DATE_FORMAT(DATE, '%Y-%m-%d') day,
    (SELECT COUNT(1) from posts) total
  FROM posts
  group by
    DATE_FORMAT(DATE, '%Y-%m-%d')) a
group by day`
于 2013-01-30T18:40:27.517 回答