-1

我是 SQL 的初学者,我正在尝试创建一个查询。

我有这些表:

CREATE TABLE Hospital (
    hid INT PRIMARY KEY,
    name VARCHAR(127) UNIQUE,
    country VARCHAR(127),
    area INT
);
CREATE TABLE Doctor (
    ic INT PRIMARY KEY,
    name VARCHAR(127),
    date_of_birth INT,
);
CREATE TABLE Work (
    hid INT,
    ic INT,
    since INT,
    FOREIGN KEY (hid) REFERENCES Hospital (hid),
    FOREIGN KEY (ic) REFERENCES Doctor (ic),
    PRIMARY KEY (hid,ic)
 );

查询是:每个国家在该国医院工作的医生人数的平均值是多少(第 1 列:每个国家,第 2 列:平均值)?谢谢。

4

1 回答 1

0

您首先需要编写一个查询每个医院的医生数

select w.hid, count(w.ic)
from work w
group by w.hid;

根据该查询,您可以检索每个国家/地区的平均医生人数:

with doctor_count as (
  select w.hid, count(w.ic) as cnt
  from work w
  group by w.hid
)
select h.country, avg(dc.cnt)
from hospital h
  join doctor_count dc on h.hid = dc.hid
group by h.country;

如果您有一个不支持公用表表达式的旧 DBMS,则可以将上述内容重写为:

select h.country, avg(dc.cnt)
from hospital h
  join (
    select w.hid, count(w.ic) as cnt
    from work 
    group by w.hid
  ) dc on h.hid = dc.hid;

这是一个 SQLFiddle 演示:http ://sqlfiddle.com/#!12/9ff79/1

顺便说一句:存储date_of_birth为整数是一个糟糕的选择。您应该使用真实的DATE列。

andwork是 SQL 中的保留字。您不应该将其用作表名。

于 2012-11-24T11:00:59.547 回答