Summary statistics: Multiple joins and group by
Here you go:

select
  si.insp_id, sd.def_length, so.obs_type_a_length, so.obs_all_length
from
  sidewalk_insp si
  left join 
    (select insp_id, sum(def_length) as def_length from sidewalk_deficiency group by insp_id) sd
    on (si.insp_id = sd.insp_id)
  left join 
    (select insp_id, sum(case when obs_type = 'a' then obs_length else 0 end) as obs_type_a_length,
            sum(obs_length) as obs_all_length from sidewalk_observation group by insp_id) so
    on (si.insp_id = so.insp_id)
order by 
  si.insp_id
;

   INSP_ID DEF_LENGTH OBS_TYPE_A_LENGTH OBS_ALL_LENGTH
---------- ---------- ----------------- --------------
         1          3                                 
         2        4.5                 5             26
         3                           19             30