2013-04-20 2 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 благодарит меня за редактирование моего вопроса, я очень новичок на сайте. Пожалуйста помоги! –

ответ

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 (которое используется до агрегации, а не после).

Я изменил запрос, чтобы использовать стандартные соединения.

Смежные вопросы