2012-04-25 196 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);