2015-11-20 81 views
2

我有一堆記錄,我要計算特定時間單位(小時,天,周)的平均計數。所以一種情況是,我想計算一個給定範圍內每天的平均記錄數。更清楚的是,這只是一個單一的數字。通過聲明返回記錄計數後的記錄計數的平均值

我這樣做是正確的,現在(這顯然是行不通的,因爲它不取平均值)的方式,如下SQLAlchemy的查詢:

db.query(MyClass).filter(MyClass.created.between(start_date, end_date)).group_by(func.HOUR(MyClass.created)).count() 

這裏的輸出SHOW CREATE TABLE yt_video

| yt_video | CREATE TABLE `yt_video` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `version` int(11) DEFAULT NULL, 
    `created` datetime DEFAULT NULL, 
    `published_date` date DEFAULT NULL, 
    `yt_data` text, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 | 

我真正關心的是創建的時間戳,但希望這有助於。

+2

請提供樣本數據和表模式。 –

+0

你可以使用numpy.average,或者你可以得到你的結果,總結所有的值併除以值的數量。 – MKesper

回答

1

這是answer

在你的情況下,使用所提供的表定義:

from sqlalchemy import cast, func 
from sqlalchemy.types import TIME, DATE 
from sqlalchemy.sql import between 

time_from = ... # get filter time maybe using datetime.time() 
time_to = ... # idem 
counts = session.query(func.count('*').label('count')).\ 
    filter(between(cast(MyClass.created, TIME), 
      time_from, 
      time_to)).\ 
    group_by(cast(MyClass.created, DATE)) 

avg = session.query(func.avg(counts.subquery().columns.count)).scalar() 

print avg