Группировка в Heap
Heap позволяет выполнять группировку данных с использованием агрегатных функций иразличных методов группировки, таких как: select, group, having и limit . Рассмотрим, как это сделать на примере.
Пример запроса с группировкой
Создание таблицы
Для начала создаётся таблица Orders:
const Orders = Heap.Table('hql-orders', {
total: Heap.Money(),
product: Heap.Optional(Heap.RefLink(Products)),
count: Heap.Integer({ minimum: 1 }),
})
Таблица хранит заказы с общей суммой total, ссылкой на продукт product и количеством заказанных единиц count.
![]()
Группировка данных
Далее создаётся представление, которое группирует заказы по продуктам и вычисляет агрегаты:
const SalesByProductView = Orders.select({
productId: 'product',
totalIncome: { $sum: [['total', 'amount']] },
totalSoldCount: { $sum: ['count'] },
orderCount: { $count: ['*'] },
})
.where({
product: {
$in: Products.select('id').where({ price: { amount: { $lt: 800 } } }),
},
})
.group('productId')
.having({ orderCount: { $gte: 2 } })
.order({ orderCount: 'desc' })
.limit(25)
.asView()
-
Выбор данных для группировки:
productId: Идентификатор продукта.totalIncome: Общий доход от продаж продукта.totalSoldCount: Общее количество проданных единиц.orderCount: Общее количество заказов.
-
Фильтрация
where({ price: { amount: { $lt: 800 } } }): Учитываются только продукты с ценой менее 800. -
Группировка
group('productId'): Данные группируются поproductId. -
Наличие
having({ orderCount: { $gte: 2 } }): Учитываются только группы с количеством заказов не менее 2. -
Сортировка
order({ orderCount: 'desc' }): Результаты сортируются по количеству заказов в порядке убывания. -
Ограничения
limit(25): Из результатов выбираются первые 25 записей.
Результат группировки
![]()
Заключение
Группировка в Heap выполняется с использованием методов select, group, having и других. Это позволяет эффективно агрегировать и анализировать данные, применяя условия и сортировку.
