Для меня это звучит как SUM
/ COUNT
, например
SQL> with registration (id, departure_date, arrival_date) as
2 (select 1, date '2019-09-20', date '2019-09-17' from dual union all -- 3 days
3 select 1, date '2019-08-13', date '2019-08-11' from dual union all -- 2 days
4 select 1, date '2019-08-08', date '2019-08-01' from dual union all -- 7 days
5 --
6 select 2, date '2019-07-20', date '2019-07-19' from dual union all -- 1 day
7 --
8 select 3, date '2019-08-27', date '2019-08-25' from dual union all -- 2 days
9 select 3, date '2019-08-14', date '2019-08-12' from dual -- 2 days
10 )
11 select id,
12 sum(departure_date - arrival_date) / count(*) avg_days_stayed
13 from registration
14 group by id;
ID AVG_DAYS_STAYED
---------- ---------------
1 4
2 1
3 2
SQL>
Почему? Ваш код вычитает дату отправления и прибытия (отдельные значения), поэтому - как бы вы выбрали среднее значение из одного значения? Возможно, вы хотели использовать цикл (через каждого человека) или что-то еще, но - приведенный выше запрос может подтолкнуть вас в правильном направлении, то есть без цикла, используйте один запрос.