Мне нужен запрос многомерных выражений, который возвращает верхние N процентов строк на основе совокупной суммы меры. Сложность заключается в том, что набор должен быть упорядочен на основе другой меры, чем используется для суммы, поэтому использование функции TopPercent
невозможно.
Чтобы пояснить, что мне нужно, вот пример. Я хочу купить не менее 1000 граммов мяса в как можно меньшем количестве упаковок. Однако дело не только в весе упаковки, мне нужно качество, поэтому я хочу отдавать предпочтение продуктам, которые содержат самый высокий процент мяса. Доступные продукты:
|| Name || Weight || PercentageOfMeat ||
| Product 1 | 500 | 20 |
| Product 2 | 250 | 60 |
| Product 3 | 1000 | 25 |
| Product 4 | 400 | 50 |
| Product 5 | 400 | 40 |
Итак, чтобы получить то, что я хочу, я сначала отсортирую по убыванию по PercentageOfMeat, чтобы удовлетворить свой первый приоритет. Затем я суммировал веса продуктов кумулятивно, пока не достигал предела в 1000 грамм. Результатом должны быть Продукт 2, Продукт 4 и Продукт 5. Это достаточно просто.
Но возможно ли это сделать в многомерных выражениях? TopPercent
(или, в случае примера, TopSum
) в противном случае был бы идеальным, но он не позволяет мне использовать разные меры для сортировки и суммирования. Если бы я хотел только продукты с наибольшим весом, это сработало бы. Чтобы процитировать документацию, функция:
Сортирует набор в порядке убывания и возвращает набор кортежей с наивысшими значениями, совокупная сумма которых равна указанному проценту или превышает его.
В основном мне нужна функция TopPercent
, которая не сортирует набор, но, насколько я знаю, ее нет. Так можно ли делать то, что я хочу, или мне нужно вычислять это в коде сервера?