學習筆記,僅供參考
數據庫的操作(CRUD操作)
聚合查詢
聚合查詢是指對某個數據表中的某個字段的數據計算其統計量,比如,求出bookstore_book數據表中書的平均價格,查詢所有書的總個數等等等。
不分組聚合
不帶分組的聚合查詢是指導將全部數據進行集中統計查詢。
- 用法
from django.db.models import *
Entry.objects.aggregate(結果變量名=聚合函數('列'))
#聚合函數
#Sum, Avg, Count, Max, Min
- 返回結果
由結果變量名和值組成的字典,格式爲:
{"結果變量名": 值}
- 舉個例子
我們先看一下bookstore_author數據表:
mysql> select * from bookstore_author;
+----+--------+-----+----------------------+
| id | name | age | email |
+----+--------+-----+----------------------+
| 1 | 山羊 | 19 | [email protected] |
| 2 | 小黃 | 10 | [email protected] |
| 5 | 小黑 | 12 | [email protected] |
| 6 | 小白 | 18 | [email protected] |
| 7 | 山羊哥 | 27 | [email protected] |
+----+--------+-----+----------------------+
5 rows in set (0.00 sec)
在Django shell中敲入如下命令:
from bookstore import models
from django.db.models import *
result = models.Author.objects.aggregate(myAvg=Avg('age'))
print("平均年齡是:", result['myAvg'])
print("result=", result)
得到結果:
平均年齡是: 17.2
result= {'myAvg': 17.2}
分組聚合
分組聚合是指計算查詢結果中每一個對象所關聯的對象集合,從而得出總計值(也可以是平均值或總和),即查詢集的每一項生成聚合。
分組聚合的步驟:
- 首先,通過先用查詢結果
Entry.object.values('列1', '列2')
查找到要分組聚合的列 - 再通過返回結果的
QuerySet.annotate(結果變量名=聚合函數('列'))
的方法分組聚合得到分組結果
- 舉個例子
我們在Django shell中敲入如下代碼:
from django.db.models import Count
from . import models
#得到所有出版社的查詢集合QuerySet
pub_set = models.Book.objects.values('pub')
#根據出版社查詢分組,出版社和Count的分組聚合查詢集合
pub_count_set = pub_set.annotate(myCount=Count('pub'))
#返回查詢集合
for item in pub_count_set:
print("出版社:", item['pub'], "圖書有:", item['myCount'])
輸出結果:
出版社: 清華大學出版社 圖書有: 2
出版社: 機械工業出版社 圖書有: 1
出版社: 人民郵電出版社 圖書有: 2
出版社: 黑山羊出版社 圖書有: 1