Назад к задачам
Junior — Senior
7

Выборка топ‑10 покупателей с более чем пятью покупками

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Переписать запрос, использующий ORM, в чистый SQL. Нужно получить десять пользователей, у которых количество записей в таблице Purchase превышает пять.

class User(db.Models):
    name = models.CharField(
        max_length=256,
        blank=True,
        default="",
        verbose_name="Имя"
    )

class Product(db.Models):
    name = models.CharField(
        max_length=256,
        blank=True,
        default="",
        verbose_name="Название"
    )
    price = models.DecimalField()

class Purchase(db.Models):
    user = models.ForeignKey(
        model=User,
        related_name="purchase",
        on_delete=models.CASCADE
    )
    product = models.ForeignKey(
        model=Product,
        related_name="purchase",
        on_delete=models.CASCADE
    )
    count_products = models.IntegerField(default=1)
users = User.objects.annotate(
    count_purchases=Count(Purchase.objects.all())
).exclude(
    count_purchases__lte=5
).order_by(
    "-count_purchases"
)[:10]