Vues par catégorie de premier niveau

Vues par catégorie de premier niveau

Incluant le total général de toutes les vues de sujets sur votre forum depuis le tout début.

/* Sélection externe pour masquer la colonne d'ordre de tri artificiel et trier selon celle-ci. */
SELECT "Catégorie", "Vues"
FROM (

    /* Vues par catégorie de premier niveau. */
    SELECT 
        topcat AS "Catégorie", 
        SUM(vues) AS "Vues",
        0 AS ordre_trie /* Colonne de tri artificielle, ici pour trier au début. */
    
    FROM (
        /* Vues de sujets dans les sous-catégories. */
        SELECT
            topcat.name AS topcat, SUM(topics.views) AS vues
        FROM topics
            INNER JOIN categories subcat ON topics.category_id = subcat.id
            INNER JOIN categories topcat ON subcat.parent_category_id = topcat.id
        GROUP BY topcat.name
        
        UNION
    
        /* Vues de sujets dans les catégories de premier niveau (en excluant les sous-catégories). */
        SELECT
            topcat.name AS topcat, SUM(topics.views) AS vues
        FROM topics 
            INNER JOIN categories topcat ON topics.category_id = topcat.id
        WHERE topcat.parent_category_id IS NULL
        GROUP BY topcat.name
    ) AS vues_par_cat
    GROUP BY topcat
    
    UNION
    
    /* Ajout d'une ligne TOTAL à la fin. */
    SELECT 
        'TOTAL GÉNÉRAL' AS "Catégorie",
        SUM(topics.views) AS "Vues",
        1 AS ordre_trie /* Colonne de tri artificielle, ici pour trier à la fin. */
    FROM
        topics
    GROUP BY "Catégorie"
    
    /* Trier la sortie par catégorie ou par vues. Activez l'une de ces options : */
    /* ORDER BY topcat, subcat */
    ORDER BY "Vues" DESC

) AS vues_par_cat_avec_total

ORDER BY ordre_trie, "Catégorie"