66. Найти профили с количеством постов больше десяти
Условие задачи:
Даны таблицы profile, post и subscription_count.
Необходимо написать SQL-запрос, который выберет профили, у которых опубликовано больше 10 постов.
Код:
CREATE TABLE profile (
id BIGSERIAL PRIMARY KEY,
nickname VARCHAR,
register_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.id = post.owner_id.💡 Сгруппируй записи по профилю.
💡 Для подсчёта постов используй
COUNT().💡 Условие на количество постов после группировки задаётся через
HAVING.💡 Таблица
subscription_count для решения этой задачи не требуется.Решение
SELECT
p.id,
p.nickname,
p.register_at
FROM profile p
JOIN post po
ON po.owner_id = p.id
GROUP BY
p.id,
p.nickname,
p.register_at
HAVING COUNT(po.id) > 10;
Сначала профиль соединяется с его постами:
JOIN post po
ON po.owner_id = p.id
Затем записи группируются по профилю, а:
HAVING COUNT(po.id) > 10
оставляет только профили, у которых больше десяти постов.
Если дополнительно нужно вывести количество постов:
SELECT
p.id,
p.nickname,
p.register_at,
COUNT(po.id) AS post_count
FROM profile p
JOIN post po
ON po.owner_id = p.id
GROUP BY
p.id,
p.nickname,
p.register_at
HAVING COUNT(po.id) > 10;