2013-04-30 2 views
1

Таблицынеправильное использование агрегатной функции выберите

Patient (patient_id, patient_name, gender, staff_no, ward_no) 

Ward (ward_no, ward_name, number_of_beds) 

Запрос

Для каждого подопечного, который имеет по крайней мере один пациент в нем, дают номер прихода и имя вместе с номером пациентов в палате и количества пустых кроватей. Ваш ответ должен быть представлен в порядке убывания пустых кроватей.

Я написал следующий код SQL и сервер дает мне ошибку:

invalid use of an aggregate function

SELECT ward.ward_no, ward.ward_name, COUNT(*) AS patient_count, 
number_of_beds - COUNT(patient_id) AS empty_beds 
FROM patient, ward 
WHERE patient.ward_no = ward.ward_no 
GROUP BY ward.ward_no, ward.ward_name, number_of_beds, empty_beds 
HAVING COUNT(*) > 1 
ORDER BY ward.ward_name 

Может кто-нибудь помочь? Мне нужно рассчитать количество пустых кроватей и вернуть их как колонку.

Заранее спасибо

+0

*** SQL *** это просто * Structured Query Language * - язык, используемый многими системами баз данных, но не продукт базы данных ... многие вещи специфичны для поставщиков, поэтому нам действительно нужно знать, что ** система баз данных ** (и какая версия) вы используя (пожалуйста, обновите теги соответственно) .... –

ответ

0

Вы не можете группировать по empty_beds, если вы возвращаете его в ЗЕЬЕСТ (с помощью SQL Server)

SELECT ward.ward_no, ward.ward_name, COUNT(*) AS patient_count, 
number_of_beds - COUNT(patient_id) AS empty_beds 
FROM patient, ward 
WHERE patient.ward_no = ward.ward_no 
GROUP BY ward.ward_no, ward.ward_name, number_of_beds HAVING COUNT(*) > 1 
ORDER BY ward.ward_name 
+0

большое спасибо .. я изменил последнюю строку на ORDER BY emp ty_beds DESC для отражения запроса – zan

0
SELECT w.ward_no, ward_name, patient_count, number_of_beds - patient_count AS empty_beds 
FROM (
     SELECT ward_no, COUNT(*) AS patient_count 
     FROM patient 
     GROUP BY 
       ward_no 
     ) p 
JOIN ward w 
ON  w.ward_no = p.ward_no 
ORDER BY 
     empty_beds DESC 
Смежные вопросы