I am trying to do a query but I don´t know how to do it.

These are the tables:

  Table Hospital         Table Doctor      Table Work

  Hid    Country         ic                Hid     ic
   1     England          1                 1       1
   2     Spain            2                 1       2
   3     France           3                 1       3  
   4     England          4                 2       4
   5     China            5                 4       5

Result that I want:

  Country     Average of Doctors Working on that Hospitals of that Country
  England     2 (the doctor with ic 1, 2, 3, and 4/number of hid)
  Spain       1
  France      0
  China       0 

I tried:

SELECT DISTINCT H.country, AVG(D.ic) 
FROM Hospital H, Doctor D 
WHERE H.hid IN 
      ( SELECT W.hid 
        FROM Work W 
        WHERE W.ic IN 
              ( SELECT COUNT(D.ic) 
                FROM D Doctor .... 
              ) 
      ) 
GROUP BY(H.country);
有帮助吗?

解决方案

Try this

select H.Country, count(W.ic) / count(distinct H.hid) as [Average]
from Hospital as H
    left outer join Work as W on W.Hid = H.Hid
group by H.Country

SQL FIDDLE

其他提示

First get the number of doctors for each hospital, then get the average over that:

select country, avg(docs) as avg_doctors_working
from (
      select country, h.hid, count(*) as docs,
      from hospital h
    left join work w on w.hid = h.hid
    group by 1, 2) x
group by 1;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top