本文首发于微信公众号: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() 方法的继承和修改、主键自增和字段更新的操作。

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

Django笔记十七之group by 分组用法总结的更多相关文章

  1. SQL中group by的用法

    group by即按照给定字段对结果集进行分组,从字面意义上理解就是根据"by"指定的规则对数据进行分组,所谓的分组就是将一个"数据集"划分成若干个" ...

  2. 总结 group by 的用法

    今天用实例总结一下group by的用法. 归纳一下:group by:ALL ,Cube,RollUP,Compute,Compute by 创建数据脚本 Create Table SalesInf ...

  3. 带你了解数据库中group by的用法

    前言 本章主要介绍数据库中group by的用法,也是我们在使用数据库时非常基础的一个知识点.并且也会涉及Join的使用,关于Join的用法,可以看我写的上一篇文章:带你了解数据库中JOIN的用法如有 ...

  4. Django笔记 —— Admin(Django站点管理界面)

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  5. Django笔记 —— 模型

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  6. Django笔记 —— 模板

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  7. 浅析MySQL使用 GROUP BY 分组聚合与细分聚合

    原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7521278.html: 若有错误,请评论指出,谢谢! 1. 聚合函数(Aggregate Function ...

  8. Group by的用法

    Group by的用法 GROUP BY 语句根据一个或多个列对结果集进行分组.在分组的列上我们可以使用 COUNT, SUM, AVG,等函数. Group by用法: SELECT column_ ...

  9. Django框架08 /聚合查询、分组、F/Q查询、原生sql相关

    Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 目录 Django框架08 /聚合查询.分组.F/Q查询.原生sql相关 1. 聚合查询 2. 分组 3. F查询和Q查询 4. o ...

  10. SQL Server中的group by(分组)

    参考网址: https://blog.csdn.net/tswc_byy/article/details/81909052 sql 查询不必需和聚合函数一起使用 ,通常来说一般是要和聚合函数一起使用来 ...

随机推荐

  1. Importing Your Own Python Module or Python File into Colab

    Source from : https://medium.com/analytics-vidhya/importing-your-own-python-module-or-python-file-in ...

  2. WebStorm 2021.3 的永久激活教程

    关注公众号回复 webstorm 即可获取激活脚本和教程 更新时间 2022年9月2日. 不定时更新 激活码可在公众号中回复[激活码]获取.

  3. POJ3723 Conscription 题解

    start: 2021-08-04 16:56:50 题目链接: http://poj.org/problem?id=3723 题目内容: Description Windy has a countr ...

  4. linux中安装启动postgresql教程

    安装: 官网地址:https://www.postgresql.org 选择下载版本: https://www.postgresql.org/ftp/source 下载方式: wget https:/ ...

  5. 针对FILES和PATH的操作

    在修改漏洞的时候发现,根据建议都使用NIO包的FILES和PATH来进行文件操作,来保证安全性. import java.nio.file.Files;import java.nio.file.Pat ...

  6. K8S—dashboard ui部署

    一.Dashboard UI概述 仪表板是基于Web的Kubernetes用户界面.您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随 ...

  7. python 把mysql数据导入到execl中

    import pymysql import pandas as pd db = pymysql.connect( host='127.0.0.1', user='root', passwd='1234 ...

  8. centos7所有用户循环登录

    1 使用快捷键Ctrl+Alt+F2进入命令终端 2 输入账号密码 3 输入 /usr/bin/sudo 4 输入 startx 那种单用户,改配置的试了没有用

  9. ideal中热部署JRebal的设置

    1.ideal中安装插件: 2.打开网址:https://www.guidgen.com/   打开链接获取新的GUID码 3.网址和UUID码拼接:http://127.0.0.1:8888/ca3 ...

  10. maven插件汇总

    编译Java源码,一般只需设置编译的jdk版本 <plugin> <groupId>org.apache.maven.plugins</groupId> <a ...