Django聚合查询和分组查询

聚合查询

聚合查询是对查询结果集进行某种特定的操作或者计算出某个值,例如对结果集求和、平均值、最大值、最小值等操作。在 Django 中,聚合查询的方法是使用 aggregate() 函数。

(1) 获得所有人的平均年龄

from django.db.models import Avg
from yourapp.models import Person

result = Person.objects.aggregate(avg_age=Avg('age'))
print(result['avg_age'])

(2) 查询男性和女性的人数及平均年龄

from django.db.models import Count, Avg
from yourapp.models import Person

result = Person.objects.values('gender').annotate(num_person=Count('id'), avg_age=Avg('age'))
for r in result:
    print(r['gender'], r['num_person'], r['avg_age'])

分组查询

分组查询是将查询结果按照某几列进行分组,并计算分组内的统计值,例如对某一列进行统计数值,并将结果按照指定列分组显示。在 Django 中,分组查询的方法是使用 values() 函数和 annotate() 函数。

(1) 查询男性和女性的人数

from django.db.models import Count
from yourapp.models import Person

result = Person.objects.values('gender').annotate(num_person=Count('id'))
for r in result:
    print(r['gender'], r['num_person'])

(2) 查询每个部门的人数

from django.db.models import Count
from yourapp.models import Person

result = Person.objects.values('department').annotate(num_person=Count('id'))
for r in result:
    print(r['department'], r['num_person'])

(3) 查询每个部门的平均年龄

from django.db.models import Avg
from yourapp.models import Person

result = Person.objects.values('department').annotate(avg_age=Avg('age'))
for r in result:
    print(r['department'], r['avg_age'])

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django聚合查询和分组查询 - Python技术站

(0)
上一篇 2023年3月12日
下一篇 2023年3月12日

相关文章

  • django 创建model(数据库表)失败

    在models.py中创建数据库表     from django.db import models # Create your models here. class Book(models.Model): name = models.CharField(max_length=20) price = models.IntegerField pub_date …

    Django 2023年4月13日
    00
  • 详解Django用户认证系统权限管理

    Django是一个强大的Web框架,内置了完整的用户认证系统和权限管理功能,可以方便地实现用户身份验证和授权管理。 本文将详细介绍Django用户认证系统和权限管理的完整攻略,包括用户登录、注册、密码重置、用户权限和角色管理等方面的内容,并提供代码示例。 用户认证系统 用户登录 Django内置了用户登录视图和模板,可以方便地实现用户登录功能。以下是一个简单…

    Django 2023年3月13日
    00
  • Django笔记十三之select_for_update等选择和更新等相关操作

    本篇笔记将介绍 update 和 create 的一些其他用法,目录如下: get_or_create update_or_create select_for_update bulk_create bulk_update 1、get_or_create 前面我们介绍过 get() 和 create() 的用法,那么 get_or_create() 的意思很简…

    2023年4月10日
    00
  • [Django]用户权限学习系列之Permission权限基本操作指令

    若需建立py文件进行测试,则在文件开始加入以下代码即可 #coding:utf-8 import os os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “www.settings”) ”’ Django 版本大于等于1.7的时候,需要加上下面两句 import django django.setup() 否则…

    Django 2023年4月10日
    00
  • [django]数据导出excel升级强化版(很强大!)

    不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条件导出的功能了. 先上图: 再说明:核心是使用django视图中的命名组,例如配置url(r’^perm=(?P<a>\w+)$’, ‘keywor…

    2023年4月10日
    00
  • Python – Django – 添加作者

    在 book_list.html 的页面下方加上 “添加作者” 的链接 <!DOCTYPE html> <html lang=”en”> <head> <meta charset=”UTF-8″> <title>作者列表</title> </head> <body&gt…

    Django 2023年4月10日
    00
  • [DJANGO] excel十几万行数据快速导入数据库研究

    先贴原来的导入数据代码: 8 import os os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “www.settings”) ”’ Django 版本大于等于1.7的时候,需要加上下面两句 import django django.setup() 否则会抛出错误 django.core.exception…

    Django 2023年4月10日
    00
  • Python Django实现个人博客系统的搭建

    Python Django实现个人博客系统的搭建攻略 简介 Python的Django框架在web开发中应用广泛,本文将介绍如何使用Django框架搭建个人博客系统。该博客系统除常见博客功能外,还包含用户身份验证,文章归档,评论系统等功能。 必要的工具及技能 在开始搭建博客系统前,需要准备好以下工具及技能: Python3.x Django HTML,CSS…

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