Напишите sql запрос, выбирающий профили, у которых больше 10 постов

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;