[英]Count occurrences of values on a single column grouped by week
我正在尝试使用Django 2.0 ORM完成此操作,但是如果您可以使用原始SQL查询解决此问题,那也将非常有帮助。
举例来说,我有一个带有“目的地”列的表,该表将始终是城市的名称,例如“洛杉矶”,“纽约”,“旧金山”或“西雅图”(但我们不事先不知道会有多少个不同的城市)。
我需要一个SQL查询(或Django ORM代码),该查询将为我提供指定日期范围内所有城市的计数,并按记录的星期进行分组(基于created_at时间戳,星期从星期一开始)。
这是Django模型的示例(非常简单):
from django.db import models
from django.utils import timezone
class Package(models.Model):
id = models.AutoField(serialize=False, primary_key=True)
name = models.CharField(max_length=64)
email = models.CharField(max_length=128, unique=True)
phone = models.CharField(max_length=32)
destination = models.CharField(max_length=64)
created_at = models.DateField(db_index=True, default=timezone.now)
updated_at = models.DateField(default=timezone.now)
以下是所需输出的示例,结构为JSON:
{
"2017-06-05-2017-06-11": {
"Los Angeles": 100,
"New York": 50,
"Copenhagen": 20
},
"2017-06-12-2017-06-18": {
"Los Angeles": 10,
"Toronto": 23,
"Las Vegas": 21,
"Carson City": 8,
"Raleigh": 1
},
"2017-06-19-2017-06-25": {
"Toronto": 24,
"Tokyo": 75,
"Kansas City": 123,
"Salem": 84,
"Bismarck": 22,
"Boise": 77,
"Las Vegas": 123
}
}
请注意,结果的大小可能会有所不同,日期范围都从星期一开始,到星期日(包括两个星期天)结束,并且城市名称是可变的且未知。
我知道有多种方法可以将其构建到Python逻辑中并执行许多查询,但是我希望我们可以在单个查询中执行此操作。 谢谢!
对于原始查询,您可以按计数分组
select destination, week(created_at,1), count(*)
from my_table
group by destination, week(created_at,1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.