给定:
保险公司(cid、姓名、电话、地址)
医生(做过、姓名、专业、地址、电话、年龄、cid)
患者(pid、姓名、地址、电话、年龄、性别、cid)
访问次数(视频、did、pid、日期、描述)
哪里
cid - Insurance Company code did - doctor code pid - patient code vid - code of visit
and a TASK : For each doctor return the number of (different) patients of age 20-25:
is :
SELECT V.did, COUNT ( V.pid )
FROM ( SELECT DISTINCT V1.did, V1.pid
FROM Visits V1,Patient P
WHERE P.pid=V1.pid and P.age >= 20 and P.age <=25 ) AS V
GROUP BY V.did
相当于:
SELECT V.did, COUNT (DISTINCT V.pid )
FROM Visits V,Patient P
WHERE P.pid=V.pid and P.age >= 20 and P.age <=25
GROUP BY V.did
它们都是完成任务的好解决方案吗?
最佳答案
您的第二个查询更适合该任务,并且应该可以更好地优化。此外,在每个查询中,您都会引用 Visit.age。难道你不应该加入Patints并引用病人年龄吗?
此外,在每次检查中,您都会计算医生的独特就诊次数,这不需要明确的声明,因为就诊绝不会重复。相反,您应该计算不同的患者 (p.id)。
关于SQL Group by 具有聚合和不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305468/