我是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列:平均值)?感谢。
答案 0 :(得分: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
列。
work
是SQL中的保留字。您不应该将其用于表名。