有没有一种方法可以将这些数据分组?

时间:2019-05-04 22:25:39

标签: sql oracle

数据看起来像-

1
2
3
1
2
2
2
3
1
5
4
1
2

因此,只要有1,就表示该组的开始,该组包括所有元素,直到到达下一个1。因此在这里,

1 2 3 - group 1
1 2 2 2 3 - group 2 

,依此类推。 SQL查询将显示每个此类组的平均值。

我不知道如何在不使用for循环或PLSQL代码的情况下对它们进行分组。

结果应看起来像两列,一列包含实际数据,col 2包含平均值-

1 - avg value of 1,2 3
2
3
1 - avg value of 1,2,2,2,3
2
2
2
3
1 - avg value of 1,5,4
5
4
1 - avg value of 1,2
2

1 个答案:

答案 0 :(得分:3)

SQL表表示无序集。除非有列指定顺序,否则没有顺序。让我假设您有这样一列。

您可以使用累积总和来识别组:

select t.*,
       sum(case when t.col = 1 then 1 else 0 end) over (order by ?) as grp
from t;

?是用于指定顺序的列。

然后您可以使用聚合计算平均值:

select grp, avg(col)
from (select t.*,
             sum(case when t.col = 1 then 1 else 0 end) over (order by ?) as grp
      from t
     ) t
group by grp;