2

SQLite の学習を始めたばかりで、質問がありました。

これが私の言いたいことの例です。

これは私のCSVです:

date
2010-10-24
2010-10-31
2010-11-01
2011-02-14
2011-02-15
2011-02-16
2011-10-01
2012-01-15
2012-05-12
2012-05-14
2012-08-12
2012-08-26


私のコード:

SELECT STRFTIME('%Y-%m', date) AS 'month', COUNT() AS 'month_count'
    FROM tableName 
    GROUP BY STRFTIME('%Y-%m', date);


結果 (コンマ区切り形式):

month, month_count
2010-10, 2
2010-11, 1
2011-02, 3
2011-10, 1
2012-01, 1
2012-05, 2
2012-08, 2


私が今探しているのは、月あたりの「month_count」の平均数を取得する方法です。これは、もちろん「month_count」の平均とは異なります。つまり、前者は 0.55、後者は 1.71 で、前者を計算しようとしています。

AVG(COUNT()) を使用してみましたが、明らかに論理的な意味はありませんでした。

コードで生成されたテーブルを一時ファイルとして保存し、そこから平均を取得する必要があると思いますが、適切に書き込む方法はわかりません。

私が欠けているものを誰かが知っていますか?

4

1 に答える 1

2

以下のコードを試してください。

create table test(date date);
insert into test values ('2010-10-24');
insert into test values ('2010-10-31');
insert into test values ('2010-11-01');
insert into test values ('2011-02-14');
insert into test values ('2011-02-15');
insert into test values ('2011-02-16');
insert into test values ('2011-10-01');
insert into test values ('2012-01-15');
insert into test values ('2012-05-12');
insert into test values ('2012-05-14');
insert into test values ('2012-08-12');
insert into test values ('2012-08-26');

SELECT a.tot_months 
     , b.month_diff
     , cast(a.tot_months as float) / b.month_diff avg_count
  FROM (SELECT COUNT(*) tot_months FROM test) a
     , (SELECT cast((strftime('%m',max(date))+12*strftime('%Y',max(date))) as int) -
               cast((strftime('%m',min(date))+12*strftime('%Y',min(date))) as int) as 'month_diff'
          FROM test) b
;

出力:

C:\scripts>sqlite3 < foo.sql
12|22|0.545454545454545
于 2012-06-21T17:17:37.517 に答える