2013-04-20 76 views
0

對於接納了超過10例患者的今天,列出每個病區病房名,病房類型和牀位數關係代數與骨料

給下面的架構中每個病房:

Patient(PatNo, patName, patAddress, DOB) 
Ward (wardNo, wardName, wardType, noOfBeds) 
Contains (PatNo, WardNo, admissionDate) 

這裏我的SQL:

select PatNo, wardNo, wardName, wardType, noOfBeds 
    from Ward w , Contains c 
where w.wardNo = c.WardNo 
    and count(c.patNo) > 10 
    and c.admissionDate = getDate(); 

我不明白如何使用關係代數的聚合。

+0

Iswanto San感謝編輯我的問題,我在網站上很新。請幫忙! – 2013-04-20 14:08:53

回答

2

兩件事。首先,

and c.admissionDate = getDate(); 

getDate()返回一個日期時間,所以這幾乎不會返回任何東西。你可能想要

and c.admissionDate = cast(getDate() as date); 

接下來,你不希望你的聚合在where子句。你想要麼:

having count(c.PatNo) > 10 

and (subquery to get admitted patient count) > 10 
1

MySQL的函數爲當前日期now()而非getdate()。試試這個:

select PatNo, wardNo, wardName, wardType, noOfBeds 
    from Ward w join 
     Contains c 
     on w.wardNo = c.WardNo 
where c.admissionDate = date(now()) 
group by c.patno 
having count(c.patNo) > 10 

你的查詢需要group by子句聚集。 count上的條件需要在having子句中,而不是在where子句中(在聚合之前使用,而不是在之後使用)。

我改變了查詢使用標準連接。