📝 Практикум 6: задачи

15 задач: агрегация (1–8) · order_by (9–12) · временные метки (13) · срезы (14–15)

⚡ Все задачи — кратко

Подготовка: загрузить данные — from store_data import *; export_data()

Агрегация

  1. 1: Общая стоимость всех продуктов — Sum(F('price') * F('quantity'))
  2. 2: Средняя цена по категориям — values('category__name').annotate(Avg('price'))
  3. 3: Самый дешевый и дорогой продукт — aggregate(Min('price'), Max('price'))
  4. 4: Количество заказов и сумма по клиентам — values(customer).annotate(Count + Sum)
  5. 5: Общий вес продуктов по категориям — Sum(F('details__weight') * F('quantity'))
  6. 6: Количество продуктов у каждого поставщика — values('supplier__name').annotate(Count)
  7. 7: Средняя продолжительность жизни продуктов — ExpressionWrapper(expiration - manufacturing, DurationField)
  8. 8: Общая сумма заказов для каждого клиента — values(customer).annotate(Sum(price*qty))

Сортировка

  1. 9: Продукты по убыванию цены — order_by('-price')
  2. 10: Заказы по общей стоимости — annotate(total=Sum...).order_by('-total')
  3. 11: Адреса по стране и городу — order_by('country', 'city')
  4. 12: Заказы по количеству позиций — annotate(Count).order_by('-item_count')

Временные метки

  1. 13: Заказы за последний месяц — filter(order_date__gte=timezone.now()-timedelta(30))

Срезы

  1. 14: Первые 5 продуктов — Product.objects.all()[:5]
  2. 15: 10 самых дорогих продуктов — order_by('-price')[:10]
Подготовка данных: Перед выполнением задач загрузите тестовые данные через Django shell:
python manage.py shell
from store_data import *
export_data()

Раздел 1: Агрегация

Задача 1 — Общая стоимость всех продуктов

Цель: Вычислить общую стоимость всех продуктов в базе данных.

Инструкция:

  1. Используйте модель Product.
  2. Рассчитайте общую стоимость всех продуктов (цена умноженная на количество) в базе данных.

Ожидаемый результат: Общая стоимость всех продуктов (одно число).

→ Посмотреть решение

Задача 2 — Средняя цена продуктов по категориям

Цель: Вычислить среднюю цену продуктов для каждой категории.

Инструкция:

  1. Используйте модели Product и Category.
  2. Группируйте продукты по категориям и вычислите среднюю цену для каждой категории.

Ожидаемый результат: Средняя цена продуктов по категориям (список строк вида «Категория: X, Средняя цена: Y»).

→ Посмотреть решение

Задача 3 — Самый дешевый и самый дорогой продукт

Цель: Найти самый дешевый и самый дорогой продукт.

Инструкция:

  1. Используйте модель Product.
  2. Найдите продукт с минимальной ценой и продукт с максимальной ценой.

Ожидаемый результат: Самый дешевый и самый дорогой продукт (цены).

→ Посмотреть решение

Задача 4 — Заказы: количество и сумма по клиентам

Цель: Вычислить количество заказов и общую стоимость заказов для каждого клиента.

Инструкция:

  1. Используйте модели Order, OrderItem и Customer.
  2. Группируйте по клиентам и вычислите количество заказов и общую стоимость заказов для каждого клиента.

Ожидаемый результат: Список клиентов с количеством заказов и общей суммой.

→ Посмотреть решение

Задача 5 — Общий вес продуктов по категориям

Цель: Рассчитать общий вес всех продуктов для каждой категории.

Инструкция:

  1. Используйте модели Product, ProductDetail и Category.
  2. Группируйте по категориям и вычислите общий вес всех продуктов в каждой категории.

Ожидаемый результат: Общий вес продуктов по категориям.

→ Посмотреть решение

Задача 6 — Количество продуктов у поставщиков

Цель: Вычислить количество различных продуктов, которые поставляет каждый поставщик.

Инструкция:

  1. Используйте модели Product и Supplier.
  2. Группируйте продукты по поставщикам и подсчитайте количество продуктов для каждого поставщика.

Ожидаемый результат: Количество продуктов у поставщиков.

→ Посмотреть решение

Задача 7 — Средняя продолжительность жизни продуктов

Цель: Вычислить среднюю продолжительность жизни продуктов (в днях) на основе даты производства и срока годности.

Инструкция:

  1. Используйте модели Product и ProductDetail.
  2. Рассчитайте среднее время от даты производства до срока годности для всех продуктов.

Ожидаемый результат: Средняя продолжительность жизни продуктов в днях.

Подсказка: потребуется ExpressionWrapper с output_field=fields.DurationField().

→ Посмотреть решение

Задача 8 — Общая сумма заказов для каждого клиента

Цель: Рассчитать общую сумму всех заказов для каждого клиента.

Инструкция:

  1. Используйте модели OrderItem, Order и Customer.
  2. Группируйте заказы по клиентам и вычислите общую сумму заказов для каждого клиента.

Ожидаемый результат: Общая сумма заказов для каждого клиента.

→ Посмотреть решение

Раздел 2: Сортировка (order_by)

Задача 9 — Сортировка продуктов по цене

Цель: Сортировать список продуктов по их цене в порядке убывания.

Инструкция:

  1. Используйте модель Product.
  2. Получите список продуктов, отсортированных по цене в порядке убывания.

Ожидаемый результат: Сортировка продуктов по цене (убывание).

→ Посмотреть решение

Задача 10 — Сортировка заказов по общей стоимости

Цель: Сортировать список заказов по их общей стоимости.

Инструкция:

  1. Используйте модели Order и OrderItem.
  2. Получите список заказов, отсортированных по их общей стоимости в порядке убывания.

Ожидаемый результат: Сортировка заказов по общей стоимости.

→ Посмотреть решение

Задача 11 — Сортировка адресов по стране и городу

Цель: Отсортировать список адресов сначала по стране, затем по городу.

Инструкция:

  1. Используйте модель Address.
  2. Получите список адресов, отсортированных по стране и затем по городу в алфавитном порядке.

Ожидаемый результат: Сортировка адресов по стране и городу.

→ Посмотреть решение

Задача 12 — Сортировка заказов по количеству позиций

Цель: Отсортировать список заказов по количеству позиций в каждом заказе.

Инструкция:

  1. Используйте модели Order и OrderItem.
  2. Получите список заказов, отсортированных по количеству позиций в каждом заказе.

Ожидаемый результат: Сортировка заказов по количеству позиций заказа.

→ Посмотреть решение

Раздел 3: Временные метки

Задача 13 — Заказы за последний месяц

Цель: Найти все заказы, сделанные за последний месяц.

Инструкция:

  1. Используйте модель Order.
  2. Используйте фильтр для поиска заказов, сделанных в последний месяц от текущей даты.

Ожидаемый результат: Заказы за последний месяц.

→ Посмотреть решение

Раздел 4: Срезы

Задача 14 — Первые 5 продуктов

Цель: Извлечь первые 5 продуктов из списка всех продуктов.

Инструкция:

  1. Используйте модель Product.
  2. Используйте срез для получения первых 5 продуктов.

Ожидаемый результат: Первые 5 продуктов.

→ Посмотреть решение

Задача 15 — 10 самых дорогих продуктов

Цель: Найти 10 самых дорогих продуктов.

Инструкция:

  1. Используйте модель Product.
  2. Используйте order_by для сортировки продуктов по цене в порядке убывания.
  3. Используйте срез для получения первых 10 записей.

Ожидаемый результат: Самые дорогие продукты (топ-10).

→ Посмотреть решение

← К оглавлению урока    Решения →