Это будет табулировать вхождения user_id для потока
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
Но вы только хотите выбрать топ-пользователя для каждой темы
SELECT thread_id, user_id, postings
FROM (
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
)
HAVING postings = max(postings)
, что эквивалентно
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
HAVING postings = max(postings)
Ключевое слово HAVING обычно используется вместе с операцией агрегирования, чтобы выбрать агрегированные выходные строки, которые удовлетворяют условиям в условии HAVING.
Предложение HAVING отличается от предложения WHERE, в котором предложение HAVING фильтрует результирующий вывод запроса. Принимая во внимание, что предложение WHERE фильтрует входные данные запроса.
Поскольку предложение HAVING фильтрует результирующий вывод запроса, он должен появляться после предложений ORDER BY и GROUP BY.