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