对于今天入住超过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 :(得分: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 :(得分: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
子句中(在聚合之前而不是之后使用)。
我将查询更改为使用标准联接。