【问题标题】:Get count of rows limit value sql php获取行数限制值sql php
【发布时间】:2018-09-03 08:48:15
【问题描述】:

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

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

如何进行 SQL 查询,以便将条目数限制为 0.8 的总值,按 php 中的 id 升序排列。 例如:-

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

结果应该是

 3

【问题讨论】:

  • 请编辑您的问题并提供您期望结果的信息

标签: php mysql sql cumulative-sum


【解决方案1】:

你需要做累积判断,由于你的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
)

Results

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

【讨论】:

  • 它返回 2 ...我想要 3。例如前三个 id 总和为 1.5 。所以 0.8
  • @JeffB 好的,等一下
  • @JeffB 你的 mysql 版本是多少?
  • 服务器版本:5.7.23 - MySQL 社区服务器 (GPL)
  • #1046 - 未选择数据库
【解决方案2】:

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

 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

【讨论】:

  • 我不明白。 id 始终是唯一的,因此不需要按 id 分组
  • @hotfix 在我看来 op 对单个用户有多个价值,但是是的,你的观点是有效的,但从他的查询中我猜想
  • 我想要计数而不是选择 id
  • @JeffB 然后使用简单的 count 和 where 子句
  • 它在我身边返回 2
猜你喜欢
  • 1970-01-01
  • 2015-03-25
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
相关资源
最近更新 更多