Django(part27)--聚合查詢

學習筆記,僅供參考




數據庫的操作(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章