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"