nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.

Как найти кол-во записей в таблице пока сумма в столбце меньше определённой?

Таблица table
id INT, Autoincriment
size INT


Хочу получить список id до тех пор пока SUM(size) меньше некого значения и аналогично кол-во этих id
То есть если бы я считал в приложении, то это был бы цикл который суммирует size до тех пор пока не достигнет порога
Условный запрос который не работает, но отображает суть того что хочу
ORDER BY нужно чтобы задать сортировку по которой идёт выборка данных.

SELECT COUNT(id) FROM `table` WHERE SUM(size) < 1000000 ORDER BY id DESC

SELECT id FROM `table` WHERE SUM(size) < 1000000 ORDER BY id DESC
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
idShura
@idShura
select @sum := 0;

select count(*) 
  from (select @sum := @sum + size sum_size
          from `table`
        ) a 
 where sum_size  < 1000000;


upd Наверное еще нужно сделать сортировку таблицы в нужном порядке
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
twobomb
@twobomb
Какая дичь. Лучше делать такое на яп, ну можно и так
SELECT COUNT(*) FROM `table` as t WHERE (SELECT SUM(size) FROM `table` WHERE `id` >= t.id ORDER BY id DESC) <= 1000000 ORDER BY id DESC

P.S. Важно смотреть на сортировку, и менять знаки в нужную сторону. Ну и естественно id должен быть числовым и уникальным
Ответ написан
Комментировать
@Nc_Soft
select `id` from `table` where (SELECT @s:= @s + `size` from (SELECT @s:= 0) s) < 1000000 order by `id` desc ;
Ответ написан
@MaximaXXl
select id, count(id) over (order by null) cnt
from ( select id, sum(size) over (order by id desc) as Sum_w
       from table) t
where Sum_w < 1000000
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы