Как написать формулу в order изпользуя данные из данных подзапроса

Мне нужно реализовать сортировку по вычисляемым данным. Есть такой запрос:

const res = await db.order.findAndCountAll({
    limit: 10,
    offset: (page - 1) * 10,
    distinct: true,
    order: [[db.sequelize.literal('taxes * count'), 'ASC']],
    where,
    include: [
      { model: db.location },
      { model: db.address },
      {
        model: db.order_product,
        as: 'products',
        required: true,
        include: [
          {
            model: db.product,
            include: [{ model: db.location }],
          },
        ],
      },
    ],
  });

В строке order: [[db.sequelize.literal('taxes * address.id'), 'ASC']], я хочу использовать для вычисления поля, которые находятся в модели db.product, к которой я обращаюсь в под-под-запросе. Причем этот под-под-запрос вернет массив, и мне нужно для каждого элемента массива выполнить (db.product.amount * db.product.price) и потом сложить все получившиеся произведения. Как описать эту формулу в order? Может быть я выбрал не правильный путь, тогда как лучше сделать сортировку по вычисляемым данным из подзапроса.


Ответы (1 шт):

Автор решения: Alexandr Kiseloy

Попробуйте так, но это не точно.

добавить рассчитывемое поле в SELECT т.е. в атрибуты, а потом по нему сортировать

const res = await db.order.findAndCountAll({
    
    attributes: {
      include: [
        [ db.sequelize.literal('taxes * count'), 'calc_col' ]
      ]
    },
    
    limit: 10,
    offset: (page - 1) * 10,
    distinct: true,
    order: [[db.sequelize.literal('calc_col'), 'ASC']],
    where,
    include: [
      { model: db.location },
      { model: db.address },
      {
        model: db.order_product,
        as: 'products',
        required: true,
        include: [
          {
            model: db.product,
            include: [{ model: db.location }],
          },
        ],
      },
    ],
  });

→ Ссылка