How the get the number bigger than the average number in Postgresql?
First, I've reduced your tables by deleting FOREIGN KEYS just for the sake of the question.




create table task 
(
id serial primary key,
title varchar (50) not null,
created_date date default current_date,
empl_id integer,
cat_id integer
);

create table employee 
(
id serial primary key,
name varchar (20) not null,
surname varchar(30) not null,
registration_date date default current_date
);






insert into employee values
(1, 'Emp1', 'SEmp1', now()),
(2, 'Emp2', 'SEmp2', now()),
(3, 'Emp3', 'SEmp3', now());






insert into task values
(1, 'Task1', now(), 1, 0),
(2, 'Task2', now(), 1, 0),
(3, 'Task3', now(), 1, 0),
(4, 'Task4', now(), 2, 0),
(5, 'Task5', now(), 2, 0),
(6, 'Task6', now(), 3, 0);



I've used this query to calculate AVG():




select avg(tasks) as average
from   (select empl_id, count(*) as tasks from task group by empl_id) t1;



|            average |
| -----------------: |
| 2.0000000000000000 |



Then I've used it to filter employees > AVG().




select   empl_id, count(*) as tasks
from     task
group by empl_id
having   count(*) &gt; (select avg(tasks) as average
                     from   (select   empl_id, count(*) as tasks 
                             from     task 
                             group by empl_id) t1);



empl_id | tasks
------: | ----:
      1 |     3



dbfiddle here