select reference.name, (SELECT
  count(samples.sample_id) as sample_count
FROM 
 public.samples LEFT OUTER JOIN public.sample_reference as samp_ref ON (samples.sample_id = samp_ref.sample_id ) 
 LEFT OUTER JOIN public.reference as sub_ref ON (samp_ref.reference_id = sub_ref.reference_id )
WHERE sub_ref.reference_id = reference.reference_id ) as sample_count,
(SELECT
 count(images.image_id) as image_count
FROM 
 public.images LEFT OUTER JOIN public.samples as samp ON (images.sample_id = samp.sample_id ) 
 LEFT OUTER JOIN public.sample_reference as sample_ref ON (samp.sample_id = sample_ref.sample_id ) 
 LEFT OUTER JOIN public.reference as sub_ref ON (sample_ref.reference_id = sub_ref.reference_id )
WHERE sub_ref.reference_id = reference.reference_id ) as images_count,
(SELECT
  count(chemical_analyses.chemical_analysis_id) as chem_count
FROM 
 public.chemical_analyses LEFT OUTER JOIN public.reference as sub_ref ON (chemical_analyses.reference_id = sub_ref.reference_id )
WHERE sub_ref.reference_id = reference.reference_id ) as chem_count

FROM reference
GROUP BY reference.reference_id, reference.name