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