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 |

1 日あたりの投稿の 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 average を使用する必要がありますか?
または、数値以外のテーブルでは AVG を使用できませんか?

4

5 に答える 5

3

これは 1 ステップで実行できます。テスト済みの例は、http ://sqlfiddle.com/#!2/05760/12 にあります。

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

または、次の 2 つの手順でこれを行うことができます。

  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

編集:

2つの日付の平均を使用したい場合は、これを追加してください

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

できることは、投稿の総数、データベースの最初のタイムスタンプからの日数を取得し、これら2つの数値から平均を計算することです。

于 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 を試して、1 日あたりのすべての投稿をカウントし、各日の平均を取ります

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 に答える