Вы можете использовать условное агрегирование с предложением filter
:
select n.l_id, n.fromorto, DATE(dtime),
avg(mean_speed) filter (where n.day_number = 6 and n.fromorto = 'T') as ms_sat_t,
avg(mean_speed) filter (where n.day_number = 6 and n.fromorto = 'F') as ms_sat_f,
avg(mean_speed) filter (where n.day_number = 7 and n.fromorto = 'T') as ms_sun_t,
avg(mean_speed) filter (where n.day_number = 7 and n.fromorto = 'F') as ms_sun_f
from newdataa n inner join
majhwys m
on n.l_id = m.link_id
group by n.fromorto, CAST(dtime as DATE), n.l_id
order by n.l_id;
В старых версиях Postgres вы реализуете это с помощью условного агрегирования:
avg(case when n.day_number = 6 and n.fromorto = 'T' then mean_speed end) as ms_sat_t,