本篇笔记介绍了Django中模型的groupby对应的一些操作。使用的Model如下:classTestModel(models.Model):num=models.IntegerField()user_id=models.IntegerField()create_date=models.DateField()我们写几条数据:TestModel.objects.create(num=78,user_id=1,create_date="2022-01-01")TestModel.objects.create(num=99,user_id=1,create_date="2022-01-01")TestModel.objects.create(num=87,user_id=1,create_date="2022-01-08")TestModel.objects.create(num=66,user_id=2,create_date="2022-01-01")TestModel.objects.create(num=54,user_id=2,create_date="2022-01-08")TestModel.objects.create(num=77,user_id=2,create_date="2022-01-16")注释内容如下:distinct单字段distinctmultiplefieldscount字段去重后的总数sum某字段的总和groupbygroupstatisticscountgroupbygroupstatisticsmaxgroupbygroupstatisticssumgroupbygroupstatisticscount+distinct1,distinctsinglefield现在需要user_id字段去重,获得重复数据删除n如果user_id列表使用SQL,大致如下:selectdistinctuser_idfromblog_test;使用QuerySet语句是:TestModel.objects.values_list("user_id",flat=True).distinct()2.DistinctMultiplefields假设需要对user_id和create_date这两个字段进行去重。SQL语句如下:selectdistinctuser_id,create_datefromblog_test;对应的QuerySet语句:TestModel.objects.values("user_id").distinct()3.count字段去重后的总数。比如我们想查看2022-01-01上有多少不同user_id值的数据selectcount(distinctuser_id)fromblog_testwherecreate_date='2022-01-01';对应的QuerySet为:TestModel.objects.filter(create_date='2022-01-01').values("user_id").distinct().count()4,sum我们要查询某个字段2022的总和-01-01这天num字段的数据总和是多少:selectsum(num)fromblog_testwherecreate_date='2022-01-01';Django语句:fromdjango.db.modelsimportSumTestModel.objects.filter(create_date='2022-01-01').aggregate(sum_num=Sum('num'))#返回值为#{'sum_num':243}5.groupbygroupstatisticscount根据日期统计user_id的总数:selectcreate_date,count(user_id)fromblog_testgroupbycreate_date;Django语句:fromdjango.db.modelsimportCountTestModel.objects.values("create_date").annotate(count=Count("user_id"))6、groupbygroupstatisticsmax根据日期计算每天最多num条数据:selectcreate_date,max(num)fromblog_testgroupbycreate_date;Django语句:TestModel.objects.values("create_date").annotate(max_num=Max("num"))7。groupbygroupstatisticssum根据日期计算num的总数:selectcreate_date,sum(num)fromblog_testgroupbycreate_date;Django语句:fromdjango.db.modelsimportSumTestModel.objects.values("create_date").annotate(sum_num=Sum("num"))8,groupbygroup统计count+distinct如果是需要去重的统计user_id,SQL如下:selectcreate_date,count(distinctuser_id)fromblog_testgroupbycreate_date;Django语句:TestModel.objects.values("create_date").annotate(count=Count("user_id",distinct=True))以上就是本篇笔记的全部内容,后面还会有更深入的几篇知识点介绍,比如Model实例的save()方法的继承和修改,主键自增和字段更新的操作
