2013-05-16 73 views
-4

問題:顯示hospitalid,hname,醫院(S)的HTYPE具有與它們相關聯的醫生人數最多的。SQL查詢錯誤:「右括號失蹤失蹤」

patient表:

patientid 
pname 
address 
amount 
ptype 

hospital

hospitalid 
hname 
htype 

doctor表:

doctorid 
dname 
specialization 
hospitalid 
status 

billing表:

billingid 
patientid 
doctorid 
fees 
billdate 

到目前爲止,這是我:

select * from hospital where hospitalid = 
    (select hospitalid from doctor group by hospitalid having count (doctorid) = 
     (select max (doctoramt) from 
      (select count (doctorid) as doctoramt from doctor group by hospitalid) as tbltemp)); 
+0

任何人都可以請幫我儘快 –

+1

提示爲未來的問題:請** **總是定義你使用(作爲標記)什麼數據庫系統。 SQL僅僅是查詢語言 - ** **不是一個數據庫產品.... –

+0

謝謝...使用Oracle –

回答

0

你不能使用AS tbltemp在Oracle中爲表格別名。 AS關鍵字只能用於別名列而非表格。您可以刪除AS關鍵字,或在這種情況下,因爲你沒有提到的別名,刪除整個AS tbltemp部分。 Here's an SQL Fiddle

它看起來像解析器最初試圖解釋AS作爲別名,然後不知道什麼tbltemp的解釋是:。

ZZA的做法是更好的,無論如何,但你也可以使用anayltic功能,以避免擊中表多次:

select hospitalid, hname, htype from (
    select hospitalid, hname, htype, doc_count, 
    rank() over (order by doc_count desc) as rn 
    from (
    select h.hospitalid, h.hname, h.htype, 
     count(d.doctorid) as doc_count 
    from hospital h 
    join doctor d on d.hospitalid = h.hospitalid 
    group by h.hospitalid, h.hname, h.htype 
) 
) 
where rn = 1; 

另一個SQL Fiddle here。最裏面的select不計數,一個新的水平排名在各醫院的醫生下降的編號順序分組的結果,和最外層限制了對排名最高的。

無論哪種方式,如果有一個領帶 - 兩家醫院使用相同數量的醫生 - 你會得到多行回來。如果這不是你想要的,你需要決定如何打破平局。

1

試試這個,但未經測試

select * from hospital where hospitalid = 
(select hospitalid from doctor group by hospitalid having count (doctorid) = 
    (select max (doctoramt) from 
     (select count (doctorid) as doctoramt from doctor group by hospitalid) as tbltemp))); 
+0

同樣缺少右對象錯誤。 –

0

試試這個:

SELECT h.hospitalid, h.hname, h.htype 
FROM hospital h, doctor d 
WHERE h.hospitalid = d.hospitalid 
GROUP BY h.hospitalid, h.hname, h.htype 
HAVING COUNT(*) = (SELECT MAX(a) from (SELECT COUNT(*) a from doctor group by hospitalid));