sql – 如何通过不间断的序列来分组条目?
发布时间:2020-05-24 13:51:15 所属栏目:MsSql 来源:互联网
导读:CREATE TABLE entries ( id serial NOT NULL, title character varying, load_sequence integer); 和数据 INSERT INTO entries(title, load_sequence) VALUES (A, 1);INSERT INTO entries(title, load_sequen
CREATE TABLE entries ( id serial NOT NULL,title character varying,load_sequence integer ); 和数据 INSERT INTO entries(title,load_sequence) VALUES ('A',1);
INSERT INTO entries(title,2);
INSERT INTO entries(title,3);
INSERT INTO entries(title,6);
INSERT INTO entries(title,load_sequence) VALUES ('B',4);
INSERT INTO entries(title,5);
INSERT INTO entries(title,7);
INSERT INTO entries(title,8);
PostgreSQL中是否有一种方法可以编写SQL,在按load_sequence对它们进行排序后,它们按相同的标题段对数据进行分组. =# SELECT id,title,load_sequence FROM entries ORDER BY load_sequence; id | title | load_sequence ----+-------+--------------- 9 | A | 1 10 | A | 2 11 | A | 3 13 | B | 4 14 | B | 5 12 | A | 6 15 | B | 7 16 | B | 8 我想要小组: =# SELECT title,string_agg(id::text,',' ORDER BY id) FROM entries ???????????; 结果将是: title | string_agg -------+------------- A | 9,10,11 B | 13,14 A | 12 B | 15,16 解决方法您可以使用以下查询:SELECT title,' ORDER BY id)
FROM (
SELECT id,ROW_NUMBER() OVER (ORDER BY load_sequence) -
ROW_NUMBER() OVER (PARTITION BY title
ORDER BY load_sequence) AS grp
FROM entries ) AS t
GROUP BY title,grp
计算的grp字段用于识别具有连续load_sequence值的标题记录的片段.在GROUP BY子句中使用此字段,我们可以在id值上实现所需的聚合. Demo here (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQL Server 2008中的临时表上的sql-server – nolock
- sql – 操作数数据类型NULL对于max运算符无效
- sql-server – SQL Server查询错误
- sql-server – 如何将图像插入sql server数据库?
- mysql使用mysqld_multi部署单机多实例的方法教程
- sql server 2000管理单元初始化失败的解决方法
- Firebase – 添加数据库规则 – 路径包含无效字符
- sql-server – 如何在SQL Server中调试合并?
- sql-server – 访问SQLCMD中SQL语句的返回值
- Capistrano命令用于创建数据库
