查询分组5条记录

时间:2017-10-31 04:31:24

标签: 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,999,1000

1 个答案:

答案 0 :(得分:2)

以这种方式使用row_numberlistagg功能:

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

工作演示:http://sqlfiddle.com/#!4/ef526/10

| 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 |