获取行数限制值sql php

时间:2018-09-03 08:48:16

标签: php mysql sql cumulative-sum

我有一个带有以下数据的sql表交易

  id| value
   1| 0.1
   2| 0.5
   3| 0.9
   4| 0.3

如何进行SQL查询,以使条目计数限制为在PHP中按ID升序总值为0.8。 例如:-

COUNT id FROM trade WHERE SUM(value) > 0.8 by id ASC

结果应为

 3

2 个答案:

答案 0 :(得分:2)

您需要进行累积判断,因为您的mysql版本不支持window函数,因此该解决方案将很难阅读,因为您需要编写子查询而不是window函数。

通过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
)

Results

| COUNT(*) |
|----------|
|        3 |

答案 1 :(得分:1)

在我看来,您需要聚合函数和累积总和以过滤所需的结果

 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