SQLite-根据特定的计算总和过滤记录

Bad*_*Cat 1 sql sqlite

我得到了一张表格,其中包含数量不等的记录,这些记录包含人员,人员的体重以及确定应按哪个顺序选择人员的顺序值...

create table line (
      id int not null PRIMARY KEY,
      name varchar(255) not null,
      weight int not null,
      turn int unique not null,
      check (weight > 0)
  );
Run Code Online (Sandbox Code Playgroud)

我必须从表格中检索最近的记录,当一起计算人的体重时,该记录不超过1000磅order

例如,如果表是

id | name                | weight  | order |
---+---------------------+---------+-------+
5  | Mark                |   250   |   1   |
4  | James               |   175   |   5   |
3  | John                |   350   |   2   |
6  | James               |   400   |   3   |
1  | Rick                |   500   |   6   |
2  | Mike                |   200   |   4   |
Run Code Online (Sandbox Code Playgroud)

该查询应仅返回James,因为前三名(每人order)的体重将适合1000磅。这三个人的体重之和为250 + 350 + 400 = 1000

桌子上可能有同名的人。因此,应将id用于计算。

我将如何编写可以相应过滤的SQLite语句?

我应该首先排序,order但是从那里开始我的SQL知识太有限,无法弄清楚如何计算1000以内的总和...

SELECT name, weight, order FROM line ORDER BY order ASC
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 5

我们可以使用相关的子查询来做到这一点:

SELECT
    id,
    name,
    weight,
    "order",
FROM line t1
WHERE
    (SELECT SUM(t2.weight) FROM line t2 WHERE t2."order" <= t1."order") <= 1000
ORDER BY
    "order" DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

上面查询中的相关子查询计算订单给出的权重的总和。该WHERE子句仅限制累计权重不超过1000的行记录。然后,我们按order列降序LIMIT 1对目标James记录进行排序。

顺带一提,避免使用SQL关键字order来命名列。