У меня есть торговля таблицей SQL со следующими данными
id| value
1| 0.1
2| 0.5
3| 0.9
4| 0.3
Как мне сделать запрос SQL, чтобы получить количество записей, ограниченное общим значением 0,8 по возрастанию по идентификатору в php.
Например:-
COUNT id FROM trade WHERE SUM(value) > 0.8 by id ASC
Результат должен прийти как
3
Вы должны сделать кумулятивное суждение, потому что ваша версия mysql не поддерживает оконную функцию, поэтому решение будет немного трудным для чтения, потому что вам нужно написать подзапрос вместо оконной функции.
сделать кумулятивное число Id
столбец, а затем получить MIN(ID)
в подзапросе, когда Id = 3
значение будет больше, чем 0.8
,
наконец, получить Id маленький и равный MIN(ID)
вы получите ожидаемый результат.
CREATE TABLE trade(
id INT,
value FLOAT
);
INSERT INTO trade VALUES(1,0.1);
INSERT INTO trade VALUES(2,0.5);
INSERT INTO trade VALUES(3,0.9);
INSERT INTO trade VALUES(4,0.3);
Запрос 1:
SELECT COUNT(*)
FROM trade t1
WHERE t1.id <= (
SELECT MIN(ID) FROM (
SELECT ID,(
SELECT SUM(tt.value)
FROM trade tt
WHERE tt.id <= t1.id
) total
FROM trade t1
) t1
where total > 0.8
)
| COUNT(*) |
|----------|
| 3 |
Мне кажется, вам нужна агрегатная функция, а накопленная сумма — для фильтрации желаемого результата.
set @csum := 0.0;
select count(id) from
(
select id,@csum := @csum + value as sum_val from t
order by id
) t1
where sum_val <1.3
http://sqlfiddle.com/#!9/abf460/2
count(id)
3