Оптимизация расчёта среднего значения в TypeOrm (SQL)
В данном отрывке я считаю среднюю цену из трех значений ближайших по mileage. Когда я использую subQuery в from, среднее значение высчитывается правильно, но если я просто выберу reports.price мне возвращает эти три ближайшие значения столько раз, сколько рядов в таблице. Есть ли возможность избавиться от лишних дубликатов, либо вообще каким-то образом проходить по subQuery только один раз?
return this.repo
.createQueryBuilder()
.select('AVG(reports.price)', 'price')
.from(
(subQuery) =>
subQuery
.select('*')
.from(Report, 'reports')
.where('make = :make', { make })
.andWhere('model = :model', { model })
.andWhere('lng - :lng BETWEEN -5 AND 5', { lng })
.andWhere('lat - :lat BETWEEN -5 AND 5', { lat })
.andWhere('year - :year BETWEEN -3 AND 3', { year })
.andWhere('approved IS TRUE')
.orderBy('ABS(mileage - :mileage)', 'ASC')
.setParameters({ mileage })
.limit(3),
'reports',
)
.getRawMany();