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 и других. Это позволяет эффективно агрегировать и анализировать данные, применяя условия и сортировку.