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

时间:2018-07-29 07:58:00

标签: 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)
  );

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

2 个答案:

答案 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的行记录。然后,我们用orderLIMIT 1列进行降序排序,以将James记录作为目标。

顺便说一句,避免使用诸如order之类的SQL关键字来命名您的列。

答案 1 :(得分:1)

SQL语法不区分大小写。在[]中包装列名称:[订单]

SELECT name, weight, order FROM line ORDER BY [order] ASC