11聚合函数求和Sum,平均值Avg,计数Count,最大值Max,最小值Min


聚合函数分为整表聚合和分组聚合,主要用于统计(求和Sum,平均值Avg,计数Count,最大值Max,最小值Min)

使用聚合函数的前提需要导入:from django.db.models import *

语法:MyModel.objects.aggregate(结果变量名=聚合函数('列'))

1整表聚合示例:

使用sql语句统计book表内有多少条数据:

mysql> select count(*) from book;
+----------+
| count(*) |
+----------+
|        4 |
+----------+
1 row in set (0.01 sec)

mysql> select count(*) as hello from book;
+-------+
| hello |
+-------+
|     4 |
+-------+
1 row in set (0.00 sec)

mysql>

用DjangoORM实现:

(venv) D:\PycharmProjects\mysite3>python manage.py shell
>>> from bookstore.models import Book
>>> from django.db.models import *
>>> b1 = Book.objects.aggregate(hello=Count("id"))
>>> b1
{'hello': 4}

2分组聚合示例:

对某个表的分组按照一定的规则进行统计:

使用出版社字段这个条件,对Book表进行统计,并过滤出数量大于1的出版社:

分析:

根据”列“统计”表“,首先需要使用values()方法对表进行分组,目的是为了获取这个表的queryset对象

然后使用聚合函数.annotate()对这个queryset进行统计,

先分组
##按照pub这个列对Book表进行分组
(venv) D:\PycharmProjects\mysite3>python manage.py shell
>>> from bookstore.models import Book
>>> pub_set=Book.objects.values('pub')
>>> print(pub_set)
<QuerySet [{'pub': '清华大学出版社'}, {'pub': '清华大学出版社'}, {'pub': '机械工业出版社'}, {'pub': '机械工业出版社'}]>
>>>
再聚合
#用.annotate()方法对上面的pub_set进行统计:
>>> from django.db.models import *
>>> pub_count_set=pub_set.annotate(myCount=Count('pub'))
>>> print(pub_count_set)
<QuerySet [{'pub': '清华大学出版社', 'myCount': 2}, {'pub': '机械工业出版社', 'myCount': 2}]>
>>>

#统计聚合结果并过滤出数量大于1的数据
>>> result = pub_set.annotate(res=Count('id')).filter(res__gt=1)
>>> print(result)
<QuerySet [{'pub': '清华大学出版社', 'res': 2}, {'pub': '机械工业出版社', 'res': 2}]>
>>>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM