python - sqlalchemy - 如何从表中分组和计算最近 12 个月的数据
问题描述
我有一个包含用户、类别和 register_date 的表,我需要按月和类别获取过去 12 个月的用户组计数。
user register_date category
a 1/7/2020 1
b 2/8/2020 1
c 1/9/2020 1
d 2/10/2020 2
e 1/11/2020 2
f 2/12/2020 2
g 2/13/2020 3
h 1/14/2020 3
e 1/11/2020 1
f 2/12/2020 1
g 2/13/2020 2
h 1/14/2020 3
e 1/11/2020 3
f 2/12/2020 1
我尝试过这样的事情。我真的对代码感到困惑......
@classmethod
def cont_user(cls):
return cls.query(cls.user.count(), ).group_by(extract('year', cls.registerd_date),
extract('month', cls.registered_date)).first(12)
这就是我在 MS SQL 中实现它的方式 --> 但要求是使用 flask-sqlalchemy 进入 mysql(这只是为了提供有关要求的想法)
SELECT count([UserName]) as user, DATENAME(month, [Registered_date]) + '-' + CAST(YEAR([Registered_date]) AS nvarchar) as my, [category]
FROM [database].[dbo].[user_table] group by [category], DATENAME(month, [Registered_date]) + '-' + CAST(YEAR([Registered_date]) AS nvarchar)
我已经参考了以下链接,但未能根据我的要求进行转换...
期待这样的输出。
count month-year category
10 Jan-19 1
15 Jan-19 2
20 Jan-19 3
12 Feb-19 1
14 Feb-19 2
19 Feb-19 3
9 Mar-19 1
19 Mar-19 2
24 Mar-19 3
解决方案
当我们使用类方法时,需要使用with_entities。
谢谢您的帮助....
经过一些实验,下面的代码对我有用。
添加了实体。还包括月份和年份,以匹配我在顶部的输出。
from sqlalchemy import func
cls.query.with_entities(func.count(cls.user), cls.category, func.year(cls.registered_date), func.month(cls.registered_date))
.group_by(func.year(cls.registered_date), func.month(cls.registered_date), cls.category)
.limit(12).all()
推荐阅读
- javascript - 如何在 WordPress REST API 中获取自定义字段发布对象数据
- go - 类型为 interface{} 时初始化 nil 指针
- tooltip - Oracle APEX 20.1 - 自定义字段帮助/工具提示
- google-apps-script - 使用 Google Apps 脚本查找特定值,然后在同一行中填充单元格
- regex - 正则表达式不匹配字符串中的确切单词
- java - 我在构建应用程序时在 android studio 中遇到了 Android 资源链接失败错误。我不知道如何解决这个问题。我是 Android Studio 的新手
- javascript - 仅当屏幕宽度> 1250px时如何执行脚本
- flutter - DropdownButtonFormField 导致 RenderFlex 溢出
- flutter - 如何在颤振中集成 facebook 登录?
- powershell - 即使加载程序集,SMO Powershell 也会损坏