84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我从该表中有一些表,我使用该表获取记录
string_agg(a2.sampl_no, ', ') as sampl_nos
和 group by 子句可以正常工作,但我想让每一行最多有 4 个sample_no 聚合。
假设我从数据库中得到
string_agg as (0001, 0002, 0003, 0004, 0005, 0006)
在一排,但我想要这个
(0001, 0002, 0003, 0004) (0006, 0007).
帮我解决这个问题。
如果您想在数据库中执行此操作,可以使用 row_number() 将记录分成四组,然后使用 string_agg():
row_number()
string_agg()
select * from rec_agg; ┌───────────┐ │ sample_no │ ├───────────┤ │ 0001 │ │ 0002 │ │ 0003 │ │ 0004 │ │ 0005 │ │ 0006 │ │ 0007 │ │ 0008 │ │ 0009 │ │ 0010 │ │ 0011 │ └───────────┘ (11 rows) with mk_grp as ( select *, ((row_number() over (order by sample_no)) - 1) / 4 as grp from rec_agg ) select string_agg(sample_no, ' ,') from mk_grp group by grp ; ┌────────────────────────┐ │ string_agg │ ├────────────────────────┤ │ 0001 ,0002 ,0003 ,0004 │ │ 0009 ,0010 ,0011 │ │ 0005 ,0006 ,0007 ,0008 │ └────────────────────────┘ (3 rows)
如果您想在数据库中执行此操作,可以使用
row_number()
将记录分成四组,然后使用string_agg()
: