4. Выбрать профили, у которых больше 10 постов
Условие задачи:
Даны таблицы профилей, постов и количества подписок.
Необходимо выбрать профили, у которых опубликовано больше 10 постов.
Код:
CREATE TABLE profile (
id BIGSERIAL PRIMARY KEY,
nickname VARCHAR,
registered_at TIMESTAMP
);
CREATE TABLE post (
id BIGSERIAL PRIMARY KEY,
owner_id BIGINT REFERENCES profile(id),
body TEXT,
inserted_at TIMESTAMP,
likes_count INT
);
CREATE TABLE subscription_count (
profile_id BIGINT REFERENCES profile(id) UNIQUE,
followers_count INT,
following_count INT
);
Спойлеры к решению
Подсказки
💡 Соедини
💡 Сгруппируй записи по профилю.
💡 Количество постов можно получить через
💡 Для фильтрации после группировки используй
profile и post по profile.id = post.owner_id.💡 Сгруппируй записи по профилю.
💡 Количество постов можно получить через
COUNT().💡 Для фильтрации после группировки используй
HAVING.Решение
SELECT
p.id,
p.nickname
FROM profile p
JOIN post po
ON po.owner_id = p.id
GROUP BY p.id, p.nickname
HAVING COUNT(po.id) > 10;
JOIN связывает каждый профиль с его постами.
После этого строки группируются по профилю, а условие:
HAVING COUNT(po.id) > 10
оставляет только профили, у которых опубликовано больше 10 постов.
Таблица subscription_count для решения этой задачи не требуется.