【发布时间】:2021-02-19 22:14:53
【问题描述】:
给定 sql 表(我使用的是 SQLite3):
CREATE TABLE person(name text, number integer);
并填充值:
insert into person values
('Leandro', 2),
('Leandro', 4),
('Maria', 8),
('Maria', 16),
('Jose', 32),
('Leandro', 64);
我想要的是获得number 列的总和,但仅限于连续行,这样我就可以获得保持原始插入顺序的结果:
Leandro|6
Maria|24
Jose|32
Leandro|64
到目前为止,我得到的“最接近”的是:
select name, sum(number) over(partition by name) from person order by rowid;
但这清楚地表明我对 SQL 的理解还很遥远,因为缺少最重要的功能(连续行的分组和求和),但至少顺序是存在的 :-):
Leandro|70
Leandro|70
Maria|24
Maria|24
Jose|32
Leandro|70
最好答案不应该要求创建临时表,因为预计输出总是与插入数据的顺序相同。
【问题讨论】:
-
您在两列表格中看到的顺序实际上并不存在。您需要提供表格顺序的第三列。
-
@TimBiegeleisen 我依赖于 SQLite 在未添加主键 ID 时自动添加的隐藏“rowid”主键((整数自动增量))。不是一个好习惯,但对于示例来说已经足够了:-)
标签: sql sqlite aggregate-functions