ЧатиумРазработчикамСтоимость
Войти

Группировка в 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.

ordersTable

Группировка данных

Далее создаётся представление, которое группирует заказы по продуктам и вычисляет агрегаты:

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()
  1. Выбор данных для группировки:

    • productId: Идентификатор продукта.
    • totalIncome: Общий доход от продаж продукта.
    • totalSoldCount: Общее количество проданных единиц.
    • orderCount: Общее количество заказов.
  2. Фильтрация where({ price: { amount: { $lt: 800 } } }): Учитываются только продукты с ценой менее 800.

  3. Группировка group('productId'): Данные группируются по productId.

  4. Наличие having({ orderCount: { $gte: 2 } }): Учитываются только группы с количеством заказов не менее 2.

  5. Сортировка order({ orderCount: 'desc' }): Результаты сортируются по количеству заказов в порядке убывания.

  6. Ограничения limit(25): Из результатов выбираются первые 25 записей.

Результат группировки

result

Заключение

Группировка в Heap выполняется с использованием методов select, group, having и других. Это позволяет эффективно агрегировать и анализировать данные, применяя условия и сортировку.