возвращать строки, в которых сумма в поле меньше заданного значения - PullRequest
0 голосов
/ 08 сентября 2011

Мои знания MySQL являются базовыми. Я хочу построить запрос, чтобы вернуть все строки, которые суммируют данное значение, в порядке возрастания. Я не могу понять, как я могу это сделать. Использование sum () возвращает только одну строку. Я пробовал подзапрос, но он возвращает все строки. Я не хочу, чтобы кто-то делал мою работу, я просто хочу, чтобы вы помогли мне разобраться в этом. У кого-нибудь есть идея?

Как извлечь все строки, которые его "значение" сумма 30 Пример:

given value: 30
field to sum: value


table:
id name      value  order
1  name1     3      1
2  name2     10     6
3  name3     13     3
4  name4     5      8
5  name5     20     25

Итак, запрос должен вернуть: идентификатор 1, идентификатор 3, идентификатор 2, идентификатор 4

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011
set @total:=0;
select id, name, value, `order`
from 
(select 
 id, name, value, `order`, 
 @total:=if(@total is null, 0, @total)+`order` as total
 from THE_TABLE
 order by `order`
) as derived 
where total<=30;
0 голосов
/ 08 сентября 2011

Используя postgres в качестве базы данных, я думаю, что это то, что вы хотите.Я не уверен, если это работает аналогично в MySQL:

CREATE TABLE test (
id int,
name varchar(50),
value int,
order_ int
);

INSERT INTO test values (1,  'name1',     3,  1);
INSERT INTO test values (3,  'name3',     13, 3);
INSERT INTO test values (2,  'name2',     10, 6);
INSERT INTO test values (4,  'name4',     5,  8);
INSERT INTO test values (5,  'name5',     20, 25);

SELECT * FROM (SELECT  *, SUM(value) OVER (ORDER BY order_) sumvalues FROM TEST) a WHERE sumvalues <30 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...