2012-06-21 108 views
2

我剛開始學習SQLite,並有一個問題。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()),雖然這顯然沒有邏輯意義。

我猜我必須將代碼生成的表存儲爲臨時文件,然後從中獲取平均值,但我不確定如何正確編寫它。

有誰知道我錯過了什麼?

+0

你能解釋一下你是如何得到0.54? – dcp

+0

哎呦,看起來我已經掉了1/100,dcp。我打算說'0.55。'。從2010-10到2012-08的月數是22.「month_count」的總數是12. 12/22 = 0.55。這是每月0.55。 – Username

+0

用戶名 - 請參閱我的最新修訂答案,希望這個想法有效。 – dcp

回答

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 
+0

嗯,從這段代碼我得到了與我的代碼相同,但與另一列名爲'avg_count'填充零。我想知道你的代碼的語法是什麼意思,所以我將同時查看SQLite語法文檔。感謝您的迴應。 – Username

+0

@用戶名 - 好的,我下載了SQLite,上面的代碼已經過測試,所以現在就給它一個鏡頭。 – dcp

+0

是的,那是有效的。謝謝,dcp。現在我只需要了解語法是如何工作的。不過,我確定你很忙,所以我不想佔用你太多的時間。所以,我會問:你認爲什麼是學習語法的最佳方式?再次感謝。 – Username