Sql 查询第5组记录
我有一个表,例如“employee”,只有一列“id”。假设您有从1到1000的记录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
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 |