📝 Практикум 6: задачи
⚡ Все задачи — кратко
Подготовка: загрузить данные — from store_data import *; export_data()
Агрегация
- 1: Общая стоимость всех продуктов —
Sum(F('price') * F('quantity')) - 2: Средняя цена по категориям —
values('category__name').annotate(Avg('price')) - 3: Самый дешевый и дорогой продукт —
aggregate(Min('price'), Max('price')) - 4: Количество заказов и сумма по клиентам —
values(customer).annotate(Count + Sum) - 5: Общий вес продуктов по категориям —
Sum(F('details__weight') * F('quantity')) - 6: Количество продуктов у каждого поставщика —
values('supplier__name').annotate(Count) - 7: Средняя продолжительность жизни продуктов —
ExpressionWrapper(expiration - manufacturing, DurationField) - 8: Общая сумма заказов для каждого клиента —
values(customer).annotate(Sum(price*qty))
Сортировка
- 9: Продукты по убыванию цены —
order_by('-price') - 10: Заказы по общей стоимости —
annotate(total=Sum...).order_by('-total') - 11: Адреса по стране и городу —
order_by('country', 'city') - 12: Заказы по количеству позиций —
annotate(Count).order_by('-item_count')
Временные метки
- 13: Заказы за последний месяц —
filter(order_date__gte=timezone.now()-timedelta(30))
Срезы
- 14: Первые 5 продуктов —
Product.objects.all()[:5] - 15: 10 самых дорогих продуктов —
order_by('-price')[:10]
python manage.py shell
from store_data import *
export_data()
Раздел 1: Агрегация
Задача 1 — Общая стоимость всех продуктов
Цель: Вычислить общую стоимость всех продуктов в базе данных.
Инструкция:
- Используйте модель
Product. - Рассчитайте общую стоимость всех продуктов (цена умноженная на количество) в базе данных.
Ожидаемый результат: Общая стоимость всех продуктов (одно число).
Задача 2 — Средняя цена продуктов по категориям
Цель: Вычислить среднюю цену продуктов для каждой категории.
Инструкция:
- Используйте модели
ProductиCategory. - Группируйте продукты по категориям и вычислите среднюю цену для каждой категории.
Ожидаемый результат: Средняя цена продуктов по категориям (список строк вида «Категория: X, Средняя цена: Y»).
Задача 3 — Самый дешевый и самый дорогой продукт
Цель: Найти самый дешевый и самый дорогой продукт.
Инструкция:
- Используйте модель
Product. - Найдите продукт с минимальной ценой и продукт с максимальной ценой.
Ожидаемый результат: Самый дешевый и самый дорогой продукт (цены).
Задача 4 — Заказы: количество и сумма по клиентам
Цель: Вычислить количество заказов и общую стоимость заказов для каждого клиента.
Инструкция:
- Используйте модели
Order,OrderItemиCustomer. - Группируйте по клиентам и вычислите количество заказов и общую стоимость заказов для каждого клиента.
Ожидаемый результат: Список клиентов с количеством заказов и общей суммой.
Задача 5 — Общий вес продуктов по категориям
Цель: Рассчитать общий вес всех продуктов для каждой категории.
Инструкция:
- Используйте модели
Product,ProductDetailиCategory. - Группируйте по категориям и вычислите общий вес всех продуктов в каждой категории.
Ожидаемый результат: Общий вес продуктов по категориям.
Задача 6 — Количество продуктов у поставщиков
Цель: Вычислить количество различных продуктов, которые поставляет каждый поставщик.
Инструкция:
- Используйте модели
ProductиSupplier. - Группируйте продукты по поставщикам и подсчитайте количество продуктов для каждого поставщика.
Ожидаемый результат: Количество продуктов у поставщиков.
Задача 7 — Средняя продолжительность жизни продуктов
Цель: Вычислить среднюю продолжительность жизни продуктов (в днях) на основе даты производства и срока годности.
Инструкция:
- Используйте модели
ProductиProductDetail. - Рассчитайте среднее время от даты производства до срока годности для всех продуктов.
Ожидаемый результат: Средняя продолжительность жизни продуктов в днях.
Подсказка: потребуется ExpressionWrapper с output_field=fields.DurationField().
Задача 8 — Общая сумма заказов для каждого клиента
Цель: Рассчитать общую сумму всех заказов для каждого клиента.
Инструкция:
- Используйте модели
OrderItem,OrderиCustomer. - Группируйте заказы по клиентам и вычислите общую сумму заказов для каждого клиента.
Ожидаемый результат: Общая сумма заказов для каждого клиента.
Раздел 2: Сортировка (order_by)
Задача 9 — Сортировка продуктов по цене
Цель: Сортировать список продуктов по их цене в порядке убывания.
Инструкция:
- Используйте модель
Product. - Получите список продуктов, отсортированных по цене в порядке убывания.
Ожидаемый результат: Сортировка продуктов по цене (убывание).
Задача 10 — Сортировка заказов по общей стоимости
Цель: Сортировать список заказов по их общей стоимости.
Инструкция:
- Используйте модели
OrderиOrderItem. - Получите список заказов, отсортированных по их общей стоимости в порядке убывания.
Ожидаемый результат: Сортировка заказов по общей стоимости.
Задача 11 — Сортировка адресов по стране и городу
Цель: Отсортировать список адресов сначала по стране, затем по городу.
Инструкция:
- Используйте модель
Address. - Получите список адресов, отсортированных по стране и затем по городу в алфавитном порядке.
Ожидаемый результат: Сортировка адресов по стране и городу.
Задача 12 — Сортировка заказов по количеству позиций
Цель: Отсортировать список заказов по количеству позиций в каждом заказе.
Инструкция:
- Используйте модели
OrderиOrderItem. - Получите список заказов, отсортированных по количеству позиций в каждом заказе.
Ожидаемый результат: Сортировка заказов по количеству позиций заказа.
Раздел 3: Временные метки
Задача 13 — Заказы за последний месяц
Цель: Найти все заказы, сделанные за последний месяц.
Инструкция:
- Используйте модель
Order. - Используйте фильтр для поиска заказов, сделанных в последний месяц от текущей даты.
Ожидаемый результат: Заказы за последний месяц.
Раздел 4: Срезы
Задача 14 — Первые 5 продуктов
Цель: Извлечь первые 5 продуктов из списка всех продуктов.
Инструкция:
- Используйте модель
Product. - Используйте срез для получения первых 5 продуктов.
Ожидаемый результат: Первые 5 продуктов.
Задача 15 — 10 самых дорогих продуктов
Цель: Найти 10 самых дорогих продуктов.
Инструкция:
- Используйте модель
Product. - Используйте
order_byдля сортировки продуктов по цене в порядке убывания. - Используйте срез для получения первых 10 записей.
Ожидаемый результат: Самые дорогие продукты (топ-10).