数据看起来像-
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
答案 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;