Как написать SQL-запрос для выбора профилей с >10 постами? область: SQL, агрегирование и группировка для подсчета постов применяется агрегатная функция COUNT() GROUP BY используется по профилю (user_id/profile_id) агрегаты нельзя фильтровать через WHERE, поэтому нужен HAVING > 10 пример:
Как написать SQL-запрос для профилей, у которых больше 10 постов?
Как написать SQL-запрос для выбора профилей с >10 постами? область: SQL, агрегирование и группировка для подсчета постов применяется агрегатная функция COUNT() GROUP BY используется по профилю (user_id/profile_id)…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Как написать SQL-запрос для выбора профилей с >10 постами?
- область: SQL, агрегирование и группировка
- для подсчета постов применяется агрегатная функция COUNT()
- GROUP BY используется по профилю (user_id/profile_id)
- агрегаты нельзя фильтровать через WHERE, поэтому нужен HAVING > 10
- пример:
SELECT profile_id
FROM posts
GROUP BY profile_id
HAVING COUNT(*) > 10;
- эффективно фильтрует по количеству постов
- полезно для аналитики активности пользователей
Развернутый ответ
Основной ответ
Чтобы получить профили, разместившие более 10 постов, нужно сгруппировать записи по идентификатору профиля с помощью GROUP BY, посчитать их через COUNT() и отфильтровать группы оператором HAVING. Пример стандарта SQL:
SELECT profile_id, COUNT(*) AS post_count
FROM posts
GROUP BY profile_id
HAVING COUNT(*) > 10;
В данном примере предполагается, что таблица posts связана с профилями посредством поля profile_id.
Ключевые аспекты
- GROUP BY объединяет строки по профилю, благодаря чему можно агрегировать связанные с ним посты
- HAVING выполняется после группировки, тогда как WHERE отбирает отдельные строки до этапа агрегации
- Оптимизация: если сведения о профилях находятся в отдельной таблице
profiles, можно использовать INNER JOIN и подсчет постов, чтобы вернуть не только ID, но и данные профиля
Практический контекст
Такой SQL-паттерн часто применяют для анализа пользовательской активности, например при формировании рекомендаций для активных авторов. В PostgreSQL 14+ доступны оконные функции, однако для этой задачи обычно достаточно группировки с HAVING: она проще и эффективнее.