У меня база данных состоит из 4 таблиц:
- пользователей (id, "имя", фамилия, дата рождения)
- дружеских отношений (userid1, userid2, "timestamp")
- записей (id, идентификатор пользователя, «текст», «отметка времени»)
- лайков (postid, идентификатор пользователя, «отметка времени»)
Мне нужен результатнабор уникальных имен пользователей, имеющих более 3 друзей в течение января 2018 года, и их «лайки» в среднем за «пост» в диапазоне [10;35).
Я написал это утверждение для первого шага:
select distinct u."name"
from users u
join friendships f on u.id = f.userid1
where f."timestamp" between '2018-01-01'::timestamp and '2018-01-31'::timestamp
group by u.id
having count(f.userid1) > 3;
Он работает нормально и возвращает 3 строки.Но когда я добавляю вторую часть следующим образом:
select distinct u."name"
from users u
join friendships f on u.id = f.userid1
join posts p on p.userid = u.id
join likes l on p.id = l.postid
where f."timestamp" between '2018-01-01'::timestamp and '2018-01-31'::timestamp
group by u.id
having count(f.userid1) > 3
and ((count(l.postid) / count(distinct l.postid)) >= 10
and (count(l.postid) / count(distinct l.postid)) < 35);
, я схожу с ума по 94 строкам.Я не знаю почему.Буду благодарен за возможную помощь.