Sql 查询第5组记录

Sql 查询第5组记录,sql,oracle,Sql,Oracle,我有一个表,例如“employee”,只有一列“id”。假设您有从1到1000的记录 Employee ------------ ID ------------ 1 2 3 .. .. 999 1000 现在我想写一个查询,它给出以下结果,即按升序排序并连接前5到1条记录,第二条5到2秒,依此类推。你知道我该怎么做吗 这是我想要的输出 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 ........... ........... 996,997,998,99

我有一个表,例如“employee”,只有一列“id”。假设您有从1到1000的记录

Employee
------------
ID
------------
1
2
3
..
..
999
1000
现在我想写一个查询,它给出以下结果,即按升序排序并连接前5到1条记录,第二条5到2秒,依此类推。你知道我该怎么做吗

这是我想要的输出

 1,2,3,4,5
 6,7,8,9,10
 11,12,13,14,15
 ...........
 ...........
 996,997,998,999,1000

使用
row\u number
listag
功能,方法如下:

SELECT listagg( id, ',' ) within group( order by group_no, id )
FROM (
   select id,
          trunc((row_number()  over( order by id ) -1) / 5) as group_no
   from employee
)
GROUP BY group_no
工作演示:


最好在更高的级别(即应用程序代码)上进行这种类型的聚合,在应用程序代码中,您可以控制分组的更多方面。您可以在SQL中使用while循环来实现它,但这被认为是低效的
| LISTAGG(ID,',')WITHINGROUP(ORDERBYGROUP_NO,ID) |
|------------------------------------------------|
|                                      1,2,3,4,5 |
|                                     6,7,8,9,10 |
|                                 11,12,13,14,15 |
|                                 16,17,18,19,20 |
|                                 21,22,23,24,25 |
|                                 26,27,28,29,30 |
|                                 31,32,33,34,35 |
|                                 36,37,38,39,40 |
|                                 41,42,43,44,45 |
|                                 46,47,48,49,50 |
|                                 51,52,53,54,55 |
|                                 56,57,58,59,60 |
|                                 61,62,63,64,65 |
|                                 66,67,68,69,70 |
|                                 71,72,73,74,75 |
|                                 76,77,78,79,80 |
|                                 81,82,83,84,85 |
|                                 86,87,88,89,90 |
|                                 91,92,93,94,95 |
|                                96,97,98,99,100 |
|                            101,102,103,104,105 |
|                            106,107,108,109,110 |
|                            111,112,113,114,115 |
|                            116,117,118,119,120 |
|                            121,122,123,124,125 |
|                            126,127,128,129,130 |
|                            131,132,133,134,135 |
|                            136,137,138,139,140 |
|                            141,142,143,144,145 |
|                            146,147,148,149,150 |
|                            151,152,153,154,155 |
|                            156,157,158,159,160 |
|                            161,162,163,164,165 |
|                            166,167,168,169,170 |
|                            171,172,173,174,175 |
|                            176,177,178,179,180 |
|                            181,182,183,184,185 |
|                            186,187,188,189,190 |
|                            191,192,193,194,195 |
|                            196,197,198,199,200 |