关系代数与骨料
问题描述:
对于接纳了超过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();
我不明白如何使用关系代数的聚合。
答
两件事。首先,
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
子句中(在聚合之前使用,而不是在之后使用)。
我改变了查询使用标准连接。
Iswanto San感谢编辑我的问题,我在网站上很新。请帮忙! – 2013-04-20 14:08:53