我有一堆记录,我想针对这些记录计算某些时间单位(小时,天,周)的平均计数。因此,一种情况是我想计算每天在给定范围内的平均记录数。更清楚地说,这只是一个数字。
我现在正在执行的方式(显然不起作用,因为它没有取平均值),是以下sqlalchemy查询:
db.query(MyClass).filter(MyClass.created.between(start_date, end_date)).group_by(func.HOUR(MyClass.created)).count()
这是输出到SHOW CREATE TABLE yt_video:
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 |
我真正关心的只是创建的时间戳,但希望对您有所帮助。
这是答案。
在您的情况下,使用提供的表定义:
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