Количество постов по основным категориям и пользователям

Количество сообщений по категориям верхнего уровня и пользователям

Для каждой категории верхнего уровня приводится список пользователей, внесших в неё вклад, и количество их сообщений. Под сообщениями понимаются как стартовые темы, так и комментарии под ними. Вы можете выбрать отображение только одной категории верхнего уровня, отредактировав запрос.

/* Суммируем коды в категориях подуровня и верхнего уровня */
SELECT 
    category_id, username AS "Пользователь", SUM(contributions) AS "Количество сообщений"
FROM (

    /* Пользователи с темами в категориях верхнего уровня. */
    SELECT
        topics.category_id, COUNT(*) AS contributions, users.username
    FROM users 
        INNER JOIN posts ON users.id = posts.user_id
        INNER JOIN topics ON posts.topic_id = topics.id
        INNER JOIN categories ON topics.category_id = categories.id
    WHERE categories.parent_category_id IS NULL
    GROUP BY category_id, username
    
    UNION
    
    /* Пользователи с темами в категориях подуровня, сгруппированные по категориям верхнего уровня. */
    SELECT
        categories.parent_category_id AS category_id, COUNT(*) AS contributions, users.username
    FROM users 
        INNER JOIN posts ON users.id = posts.user_id
        INNER JOIN topics ON posts.topic_id = topics.id
        INNER JOIN categories ON topics.category_id = categories.id
    WHERE categories.parent_category_id IS NOT NULL
    GROUP BY categories.parent_category_id, username

) AS users_by_category
INNER JOIN categories ON category_id = categories.id

GROUP BY category_id, username

HAVING SUM(contributions) > 5

ORDER BY category_id, "Количество сообщений" DESC