Django笔记十七之group by 分组用法总结 |
您所在的位置:网站首页 › hive分组统计数量 › Django笔记十七之group by 分组用法总结 |
这篇笔记介绍 Django 里面 model 的 group by 对应的一些操作。 用到的 Model 如下: class TestModel(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 单个字段 distinct 多个字段 count 字段去重后总数 sum 某个字段总和 group by 分组统计 count group by 分组统计 max group by 分组统计 sum group by 分组统计 count + distinct 1、distinct 单个字段现在我们需要 user_id 这个字段进行去重处理,获取一个去重后的 user_id 的列表 使用 SQL 的话,大致如下: select distinct user_id from blog_test; 复制代码使用 QuerySet 语句则是: TestModel.objects.values_list("user_id", flat=True).distinct() 复制代码 2、distinct 多个字段假设需要对 user_id 和 create_date 这两个字段做去重处理, 使用 SQL 语句如下: select distinct user_id, create_date from blog_test; 复制代码对应的 QuerySet 语句: TestModel.objects.values("user_id").distinct() 复制代码 3、count 字段去重后总数比如我们想查看 2022-01-01 这天有多少不同 user_id 值的数据 select count(distinct user_id) from blog_test where create_date = '2022-01-01'; 复制代码对应的 QuerySet 为: TestModel.objects.filter(create_date='2022-01-01').values("user_id").distinct().count() 复制代码 4、sum 某个字段总和我们想查看 2022-01-01 这天 num 字段的数据的总和有多少: select sum(num) from blog_test where create_date = '2022-01-01'; 复制代码Django 语句: from django.db.models import Sum TestModel.objects.filter(create_date='2022-01-01').aggregate(sum_num=Sum('num')) # 返回值为 # {'sum_num': 243} 复制代码 5、group by 分组统计 count按照日期统计 user_id 的总数: select create_date, count(user_id) from blog_test group by create_date; 复制代码Django 语句: from django.db.models import Count TestModel.objects.values("create_date").annotate(count=Count("user_id")) 复制代码 6、group by 分组统计 max按照日期计算每一天最大的 num 的数据: select create_date, max(num) from blog_test group by create_date; 复制代码Django 语句: TestModel.objects.values("create_date").annotate(max_num=Max("num")) 复制代码 7、group by 分组统计 sum按照日期计算 num 的总数: select create_date, sum(num) from blog_test group by create_date; 复制代码Django 语句: from django.db.models import Sum TestModel.objects.values("create_date").annotate(sum_num=Sum("num")) 复制代码 8、group by 分组统计 count + distinct如果是对需要对 user_id 进行去重处理的统计,SQL 如下: select create_date, count(distinct user_id) from blog_test group by create_date; 复制代码Django 语句: TestModel.objects.values("create_date").annotate(count=Count("user_id", distinct=True)) 复制代码以上就是本篇笔记全部内容,接下来会是几个深入一点的知识点的介绍,比如一个 Model 示例 save() 方法的继承和修改、主键自增和字段更新的操作。 本文首发于微信公众号:Hunter后端 原文链接:Django笔记十七之group by 分组用法总结 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |