Вот запрос, который даст вышеуказанные результаты:
SELECT * FROM `users` u
WHERE (select sum(size) from `users` where size <= u.size order by size) < 150
ORDER BY userid
Однако проблема, которую вы описываете при выборе пользователей, которые наиболее точно соответствуют данному размеру, - это проблема упаковки бина . Это проблема NP-Hard , которая не может быть легко решена с помощью ANSI SQL. Однако приведенное выше, похоже, возвращает правильный результат, но на самом деле оно просто начинается с самого маленького элемента и продолжает добавлять элементы до тех пор, пока корзина не заполнится.
Общий, более эффективный алгоритм упаковки мусорного ведра состоит в том, чтобы начинать с самого большого элемента и продолжать добавлять меньшие по мере необходимости. Этот алгоритм будет выбирать пользователей 5 и 4.