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();

我不明白如何将聚合与关系代数一起使用。

4

2 回答 2

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
于 2013-04-20T14:31:10.590 回答
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聚合子句。条件 oncount需要在having子句中而不是在where子句中(在聚合之前而不是之后使用)。

我将查询更改为使用标准联接。

于 2013-04-20T14:44:30.647 回答