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 в зависимости от ситуации.
Только проблема, что таблицу посещения нельзя добавлять в условие, в этом смысл задачи, но, все равно спасибо.
Решил два запроса 1 и 3... чувствую, что ухватил нитку решения второго, но, пока, еще не догнал