Aggregations (Count, Sum, Avg)
Aggregations: محاسبات روی دادهها 📊
Aggregations یعنی محاسبات روی مجموعه دادهها. مثلاً تعداد کل پستها، مجموع قیمتها، یا میانگین امتیازها. جنگو توابع آماده برای این کارها داره!
Count: شمارش
from django.db.models import Count
from blog.models import Post
# تعداد کل پستها
total_posts = Post.objects.count()
# یا
total_posts = Post.objects.aggregate(Count('id'))['id__count']
# تعداد پستهای هر نویسنده
from django.contrib.auth.models import User
authors = User.objects.annotate(post_count=Count('post'))
for author in authors:
print(f"{author.username}: {author.post_count} posts")
Sum: جمع
from django.db.models import Sum
from shop.models import Order
# مجموع قیمت همه سفارشها
total_revenue = Order.objects.aggregate(Sum('price'))['price__sum']
# مجموع قیمت سفارشهای هر کاربر
from django.contrib.auth.models import User
users = User.objects.annotate(total_spent=Sum('order__price'))
Avg: میانگین
from django.db.models import Avg
from blog.models import Comment
# میانگین امتیاز کامنتها
avg_rating = Comment.objects.aggregate(Avg('rating'))['rating__avg']
# میانگین امتیاز کامنتهای هر پست
posts = Post.objects.annotate(avg_comment_rating=Avg('comment__rating'))
تفاوت aggregate و annotate:
aggregate(): یک مقدار کلی برمیگردونه (مثلاً مجموع کل)annotate(): به هر شیء یک فیلد جدید اضافه میکنه (مثلاً تعداد پستهای هر نویسنده)
سایر Aggregations
from django.db.models import Min, Max, StdDev, Variance
# کمترین و بیشترین
min_price = Product.objects.aggregate(Min('price'))
max_price = Product.objects.aggregate(Max('price'))
# انحراف معیار و واریانس
stats = Product.objects.aggregate(
avg_price=Avg('price'),
std_price=StdDev('price')
)
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.