返回 group by 语句后记录数的平均值

2024-02-04

我有一堆记录,我想计算特定时间单位(小时、天、周)内的平均计数。因此,一种情况是我想计算给定范围内每天的平均记录数。更清楚地说,这只是一个数字。

我现在这样做的方式(这显然不起作用,因为它不取平均值)是以下 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 |

我真正关心的是创建的时间戳,但希望这会有所帮助。


这里是answer https://stackoverflow.com/a/2273845/4054923.

在您的情况下,使用提供的表定义:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回 group by 语句后记录数的平均值 的相关文章