我从该表中有一些表,我使用该表获取记录
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()
:
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)
关于php - 从 group by 子句中获取一对记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72377173/