使用Oracle中的分析函数进行分组

时间:2017-05-21 16:48:40

标签: sql oracle partition-problem analytical

我有一张包含列的表格:

  • col1(主键)编号
  • col2号码 - 包含少量重复项

此表包含600条记录。我正在尝试构建一个查询,其中用户可以给出任何组计数(组中记录的最大数量。例如:11)。结果将是具有组编号的总记录。此处col2中的相同数据不应位于两个不同的组中。

示例 - 考虑此查询:

select col1, col2, round(rownum-1 /: group_size) as group_number from group_tester;

此查询将给出组号,但我发现很少有相同数据的记录属于不同的组。

有没有办法用分析函数解决我的问题?

这是一个数据样本和预期结果

数据样本

col1(student id)                          col2(student Rank)
1                                                3
2                                                3
3                                                7
4                                                3
5                                                2
6                                                1
7                                                5
8                                                5
9                                                4
10                                               6
11                                               9
12                                               8

如果组大小为4,我希望结果如下

预期结果

col1(student id)    col2(student Rank)          group number
1                          3                          2
2                          3                          2
3                          7                          2
4                          3                          2
5                          2                          1
6                          1                          1
7                          5                          3
8                          5                          3
9                          4                          1
10                         6                          1
11                         9                          3
12                         8                          3

我的任务是将学生人数分成四人小组,但两组不应该有同等级别的学生

1 个答案:

答案 0 :(得分:0)

如果您只想为col2的分组中的每一行使用唯一编号,请尝试使用row_number()over(),如下所示:

row_number() over(partition by col2 order by col1) as group_number 

将“分区依据”视为与“分组依据”类似,但返回每行而不是汇总。