我得到了一张表格,其中包含数量不等的记录,这些记录包含人员,人员的体重以及用于确定应选择人员的顺序的订单值...
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)
);
在order
中一起计算人的体重时,我必须从表中检索最后一条记录,该记录不超过1000磅。
例如如果表是
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 |
该查询应仅返回James,因为前三名(每order
人)的体重都在1000磅以内。这三个人的体重之和为250 + 350 + 400 = 1000
。
同名的人可能在表中。因此,应使用id进行计算。
我该如何编写一个SQLite语句来对其进行相应过滤?
我应该首先按order
进行排序,但是从那以后,我的SQL知识就太有限了,无法弄清楚如何计算1000之内的总和...
SELECT name, weight, order FROM line ORDER BY order ASC
答案 0 :(得分: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;
上面查询中的相关子查询计算订单给出的权重的总和。 WHERE
子句仅限于累积权重不超过1000的行记录。然后,我们用order
对LIMIT 1
列进行降序排序,以将James
记录作为目标。
顺便说一句,避免使用诸如order
之类的SQL关键字来命名您的列。
答案 1 :(得分:1)
SQL语法不区分大小写。在[]中包装列名称:[订单]
SELECT name, weight, order FROM line ORDER BY [order] ASC