Django笔记十七之group by 分组用法总结

本文首发于微信公众号:Hunter后端
原文链接: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")

本篇笔记的目录如下:

  1. distinct 单个字段
  2. distinct 多个字段
  3. count 字段去重后总数
  4. sum 某个字段总和
  5. group by 分组统计 count
  6. group by 分组统计 max
  7. group by 分组统计 sum
  8. 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() 方法的继承和修改、主键自增和字段更新的操作。

如果想获取更多相关文章,可扫码关注阅读:
image

原文链接:https://www.cnblogs.com/hunterxiong/p/17297775.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django笔记十七之group by 分组用法总结 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • python破解bilibili滑动验证码登录功能

    破解Bilibili滑动验证码登录功能是一个非常有趣的应用场景,可以帮助我们更好地理解验证码的工作原理。本攻略将介绍Python破解Bilibili滑动验证码登录功能的完整攻略,包括数据获取、数据处理、数据分析和示例。 步骤1:获取数据 在Python中,我们可以使用requests库获取网页数据。以下是获取Bilibili登录页面的示例: import r…

    python 2023年5月15日
    00
  • python输出电脑上所有的串口名的方法

    获取电脑上所有的串口名可以通过Python的第三方库pyserial实现。下面是具体的步骤和示例说明: 安装pyserial库 首先,需要在电脑上安装pyserial库。可以通过pip命令进行安装: pip install pyserial 导入pyserial库 在编写Python代码前,需要先导入pyserial库。可以通过以下代码实现: import …

    python 2023年6月5日
    00
  • Python如何获得百度统计API的数据并发送邮件示例代码

    Python如何获得百度统计API的数据并发送邮件示例代码 百度统计是一款网站分析工具,可以帮助网站管理员了解网站的访问情况、用户行为等信息。百度统计提供了API接口,可以通过API接口获取网站的访问数据。以下是两个示例,介绍了如何使用Python获得百度统计API的数据并发送邮件。 示例一:使用Python获得百度统计API的数据 以下是一个示例,可以使用…

    python 2023年5月15日
    00
  • 详解python调用cmd命令三种方法

    下面是关于“详解Python调用cmd命令三种方法”的完整攻略: 概述 在Python中,我们可以使用subprocess模块来调用命令行(cmd)命令。在这里,我们将介绍三种使用subprocess模块调用命令行命令的方法,以及如何在出现错误时处理它们。 三种方法 方法一:使用subprocess.call() subprocess.call()函数可以执…

    python 2023年6月2日
    00
  • Python一步步带你操作Excel

    以下是“Python一步步带你操作Excel”的完整实例教程。 1. 准备工作 在开始之前,需要安装openpyxl这个Python库,可以使用以下命令进行安装: pip install openpyxl 安装完成后,在Python脚本中导入openpyxl库: import openpyxl 2. 创建Excel文件 要创建一个新的Excel文件,可以使用…

    python 2023年5月13日
    00
  • 浅谈Python中的继承

    浅谈Python中的继承 继承概述 继承是一种常见的面向对象编程(OOP)技术,它允许我们创建一个新的类,该类继承了另一个类的属性和方法。新类称为“子类”或“派生类”,而被继承的类称为“父类”或“基类”。 通过继承,子类可以重用父类现有的代码,并在此基础上进行扩展或修改,从而实现代码的复用和维护。 在Python中,继承是通过在子类定义时在类名后添加括号,将…

    python 2023年6月6日
    00
  • Python学习之str重要函数

    Python学习之str重要函数 在Python中,字符串操作是很常见的操作类型。字符串类型的变量作为Python中常用的数据类型,在处理文本和数据时起着重要的作用。 在Python的str类型中,有一些常用的函数,在字符串的处理中起到了非常重要的作用。下面是str重要函数的详细讲解。 1. 字符串格式化:format函数 在Python中,我们可以通过fo…

    python 2023年6月5日
    00
  • Python3 元组tuple入门基础

    Python3元组tuple入门基础 在Python中,元组(tuple)是一个有序且不可变的序列。这意味着一旦定义,元组中的元素就不可以更改。 创建元组 元组的创建方式相对简单,只需要用小括号将元素括起来即可。例如: mytuple = (1, 2, 3) print(mytuple) # 输出 (1, 2, 3) 需要注意,在定义只有一个元素的元组时,必…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部