GROUB BY ... COUNTSUM Django ORM 等價物
我們可以在 Django ORM 上執行 GROUP BY ... COUNT
或 GROUP BY ... SUM
SQL 等價查詢,分別使用 annotate()
,values()
,order_by()
和 django.db.models
的 Count
和 Sum
方法:
讓我們的模型是:
class Books(models.Model):
title = models.CharField()
author = models.CharField()
price = models.FloatField()
GROUP BY ... COUNT
:
-
讓我們假設我們想要計算
Books
表中每個不同作者存在多少個書物件:result = Books.objects.values('author') .order_by('author') .annotate(count=Count('author'))
-
現在
result
包含一個包含兩列的查詢集:author
和count
:author | count ------------|------- OneAuthor | 5 OtherAuthor | 2 ... | ...
GROUB BY ... SUM
:
-
讓我們假設我們想要總結我們的
Books
表中存在的每個不同作者的所有書籍的價格:result = Books.objects.values('author') .order_by('author') .annotate(total_price=Sum('price'))
-
現在
result
包含一個包含兩列的查詢集:author
和total_price
:author | total_price ------------|------------- OneAuthor | 100.35 OtherAuthor | 50.00 ... | ...