Как написать формулу в 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 шт):
Попробуйте так, но это не точно.
добавить рассчитывемое поле в 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 }],
},
],
},
],
});