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