关系代数与骨料

问题描述:

对于接纳了超过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

两件事。首先,

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 

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子句中(在聚合之前使用,而不是在之后使用)。

我改变了查询使用标准连接。