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 ... | ...