【发布时间】:2021-01-16 06:37:20
【问题描述】:
我已经调试了一段时间,但我无法得到正确的结果。 在我的 django 应用程序中,我扩展了 auth_user 以添加更多字段:
from django.contrib.auth.models import User
class Person(User):
api_id = models.CharField(max_length=255)
api_key = models.CharField(max_length=255)
现在,我想根据加入日期按年和月统计用户数:
Person.objects.annotate(year=TruncYear("date_joined"), month=TruncMonth("date_joined")).values("year", "month").annotate(count=Count("pk"))
但是,我得到的只是数据库中每个用户的 count=1,而没有按年和月对他们进行分组。
这是正在执行的实际查询:
SELECT CAST(DATE_FORMAT(CONVERT_TZ(`auth_user`.`date_joined`, 'UTC', 'Europe/Madrid'), '%Y-01-01 00:00:00') AS DATETIME) AS `year`, CAST(DATE_FORMAT(CONVERT_TZ(`auth_user`.`date_joined`, 'UTC', 'Europe/Madrid'), '%Y-%m-01 00:00:00') AS DATETIME) AS `month`, COUNT(`mt_api_app_person`.`user_ptr_id`) AS `count` FROM `mt_api_app_person` INNER JOIN `auth_user` ON (`mt_api_app_person`.`user_ptr_id` = `auth_user`.`id`) GROUP BY CAST(DATE_FORMAT(CONVERT_TZ(`auth_user`.`date_joined`, 'UTC', 'Europe/Madrid'), '%Y-01-01 00:00:00') AS DATETIME), CAST(DATE_FORMAT(CONVERT_TZ(`auth_user`.`date_joined`, 'UTC', 'Europe/Madrid'), '%Y-%m-01 00:00:00') AS DATETIME), `auth_user`.`date_joined` ORDER BY `auth_user`.`date_joined` DESC
所有 count=1 似乎都是因为 GROUP BY [...] 'auth_user'.'date_joined' 按整个日期时间而不是月份和年份对条目进行分组。
这里发生了什么的任何线索?如果我执行相同的查询,但使用用户,我会得到我想要的。
SELECT CAST(DATE_FORMAT(CONVERT_TZ(`auth_user`.`date_joined`, 'UTC', 'Europe/Madrid'), '%Y-%m-01 00:00:00') AS DATETIME) AS `month`, COUNT(`auth_user`.`id`) AS `count` FROM `auth_user` GROUP BY CAST(DATE_FORMAT(CONVERT_TZ(`auth_user`.`date_joined`, 'UTC', 'Europe/Madrid'), '%Y-%m-01 00:00:00') AS DATETIME) ORDER BY NULL
【问题讨论】:
标签: python mysql django datetime