我得到了一张表格,其中包含数量不等的记录,这些记录包含人员,人员的体重以及确定应按哪个顺序选择人员的顺序值...
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)
我们可以使用相关的子查询来做到这一点:
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来命名列。
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |