SQL-запросы подсчета посещений больше среднего, мак-ого и мин-ого, причем max<

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Xartman
Сообщения: 2
Зарегистрирован: 27 май 2009, 23:32

Всем привет!
MAX, MIN and AVG не работают или я просто не знаю, как их решить :(




P.S. Уважаемая администрация, удалите, пожалуйста, тему.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

MAX, MIN, AVG и другие агрегатные функции действуют на всю выборку, граниченую условиями WHERE, и в результате "сворачивают" всю эту выборку до 1 строки.
Например "SELECT COUNT(*) FROM Посешения" - количество всех посещений.
Чтобы получить итоги по группам используйте запросы с группировкой. В критериях группировки можно указать любое поле, тогда агрегатная функция будет рассчитана для каждого значения критерия групировки
Например, "SELECT ID_врача, COUNT(*) FROM Посешения GROUP BY ID_врача" - покажет сколько пациентов всего (за всю историю) принял каждый врач.
Если в критерии группиовки добавить дату округленную до дней, то будет еще и с разбивкой по дням.

Ну а далее условия на агрегированное значение (например на COUNT(*)) накладываются с помошью HAVING

"SELECT ID_пациента, COUNT(*) FROM Посешения GROUP BY ID_пациента HAVING COUNT(*)>1" - пациенты, которые приходили более 1 раза (за всю историю)

Задача 1) требует подзапросов. Сначала вычислите среднее, а потом возьмите полученный запрос в скобки и вставьте его в предлоджение WHERE или HAVING в зависимости от ситуации.
Xartman
Сообщения: 2
Зарегистрирован: 27 май 2009, 23:32

Только проблема, что таблицу посещения нельзя добавлять в условие, в этом смысл задачи, но, все равно спасибо.
Решил два запроса 1 и 3... чувствую, что ухватил нитку решения второго, но, пока, еще не догнал
Ответить