Есть ли способ сгруппировать эти данные? - PullRequest
0 голосов
/ 05 мая 2019

Данные выглядят как -

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.

Результат должен выглядеть как два столбца, один с фактическими данными, а столбец 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 Ответ

3 голосов
/ 05 мая 2019

Таблицы 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...