Only tables AREA and ATTACK contains informations you need here (you don't want disease name), 
so at first attach informations about attacks to table containing person ID:
select personid, count(diseaseid) cnt
  from area left join attack using (areaid)
  group by personid
PersonID  Cnt
      11    2
      13    0
      12    1
Now you can count ill and healthy persons:
select 
    count(case when cnt > 0 then 1 end) Affected,
    count(case when cnt = 0 then 1 end) NotAffected
  from (
    select personid, count(diseaseid) cnt
      from area left join attack using (areaid)
      group by personid)
Affected  NotAffected
       2            1
SQLFiddle demo
There are several ways to get last output, try to find others. And example how to join all three tables:
select personid, count(diseaseid) cnt, 
    listagg(DiseaseName, ', ') within group (order by DiseaseName) Diseases
  from area 
  left join attack using (areaid)
  left join disease using (diseaseid)
  group by personid
PERSONID   CNT  DISEASES
--------  ----  ----------
      11     2  ABC, DEF
      12     1  ABC
      13     0
If you want to find only affected persons use INNER JOIN instead of LEFT.