PL / SQL按顺序分组

时间:2017-08-09 12:54:22

标签: plsql group-by sequence

我有一张这样的表:

Table 1

我希望将这3列(col1,col2,col3)与特定序列分组,得到类似的结果:

enter image description here

这样做有什么功能吗?

2 个答案:

答案 0 :(得分:1)

分析函数Dense_Rank()在这里可以正常工作。

SELECT col1 , col2 , col3 
     , DENSE_Rank() OVER (ORDER BY COL1, COL2, COL3) AS MYGROUP 
FROM REFTABLE

Rank()vs Dense_rank()密集排名将保持数字顺序没有差距,而排名将引入差距。在您的示例3中,B,Y两次可以被分配等级3,但如果使用等级4,则使用等级为下一个值将被分配等级为4(

链接到Docs

注意每次查询运行时都会分配Dense_rank,这样#可以随着数据的变化而变化。如果您希望数字是唯一的,那么您需要存储它们。然后强制Dense_Rank从存储结果中最高#的种子开始。

enter image description here

答案 1 :(得分:0)

添加rownum将每行添加序列号:

select col1, col2, col3, rownum as mygroup from table a;