2012-04-25 157 views
4

考虑:SQL嵌套查询作业

InsuranceCompanies(CID,姓名,电话,地址)

医生(,名称,专业,地址,电话,年龄,CID)

患者(的pid,姓名,地址,电话,年龄,性别,CID)

访问(VID,的确,PID,日期,描述)

其中:

cid - Insurance Company code 
did - doctor code 
pid - patient code 
vid - code of visit 

和任务:在这一年找医生检查(做,名)用的次数(次数)小于平均数访问的今年所有的医生。

我的尝试是:

SELECT D.did, D. name 
FROM Doctor D,Visit V 
WHERE V.did = D.did and D.did = CV.did and CV.visits < 
       (SELECT AVG (CV.visits) 
       FROM (SELECT V1.did AS did,COUNT(V1.vid) AS visits 
         FROM Visit V1 
         WHERE V1.date LIKE '%2012' 
         GROUP BY V1.did) AS CV) 
+1

而不是问我们,你应该创建一些示例数据,并测试一下吧!但是,不,一开始这不是测试日期年份组件的正确方法,您的括号不匹配,CV在您使用它的第一个位置不存在,并且您将返回多于一行每个医生。你还使用哪个数据库?嵌套查询的SQL语法有很小的变化。 – Rup 2012-04-25 08:32:09

+0

我真的希望我能做到这一点!但我下载了SQL Server 2012及其高级版本,甚至无法使用它......它甚至不允许我登录自己的计算机! – 2012-04-25 08:34:41

+0

据我所知我们使用SQL 1999 – 2012-04-25 08:36:00

回答

2

非常感谢弥合谁共享最美丽的和用户业间友好的SQL命令visualator永远!

DATABSE例:http://sqlfiddle.com/#!2/e85c7/3

解决方案使用的观点:

CREATE VIEW ThisYear AS 
    SELECT v.pid,v.vid,v.did 
    FROM Visits v 
    WHERE v.date LIKE '%2012'; 

CREATE VIEW DoctorsVisitCount AS 
    SELECT v.did, COUNT(v.vid) as c 
    FROM ThisYear v 
    GROUP BY v.did; 

SELECT DISTINCT d.did,d.dname,dvc.c 
FROM Doctors d,DoctorsVisitCount dvc 
WHERE dvc.c < (SELECT AVG(dvc.c) 
       FROM DoctorsVisitCount dvc);