Сложные запросы Sql

recordid | patientid | doctorid | dateofrecord
----------+-----------+----------+--------------
1 | 1 | 2 | 2020-02-01
2 | 2 | 1 | 2020-05-12
3 | 3 | 2 | 2020-12-23
4 | 1 | 3 | 2020-04-01
5 | 3 | 1 | 2020-11-02
6 | 1 | 3 | 2020-02-01
7 | 3 | 4 | 2020-02-01
8 | 4 | 4 | 2020-05-12
9 | 5 | 2 | 2020-12-23
10 | 1 | 1 | 2020-04-01

id | firstname | lastname | speciality | dateofbirth | nurseid
----+-----------+--------------+------------+-------------+---------
1 | Vitalii | Surkov | Ortoped | 2001-01-13 | 1
2 | Andriy | Kolomiets | Psyholog | 2000-04-19 | 2
3 | Doctor | Komarovskiy | Pediatr | 1945-04-09 | 3
4 | Taras | Shevchenko | Okulist | 1932-12-03 | 4
5 | Oleksandr | Nechiporenko | Hirurg | 1984-10-10 | 5

Определить врачей, количество записей в которых были выше среднего.как такое реализовать ?


Ответы (1 шт):

Автор решения: Dmitriy Novikov

Если я вас верно понял то вы хотите узнать тех врачей у которых записей больше чем в среднем по каждому врачу, вот для примера, не самый лучший вариант, тем не менее, скажите какая у вас СУБД? Есть ли там оконные функции? С их помощью можно упростить.

select * 
from table_2
where id in (select doctorid
             from table_1
             group by doctorid
             having count(distinct recordid) > (select avg(t1.count_visits)
                       from(select doctorid, count(distinct recordid) as count_visits
                            from table_1
                            group by doctorid)t1))
→ Ссылка