دوره‌ها / Django / Aggregations (Count, Sum, Avg)

Aggregations (Count, Sum, Avg)

15 دقیقه Article

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')
)

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.

برای ذخیره پیشرفت وارد شوید