Visualizzazioni per categoria di primo livello

Visualizzazioni per categoria di primo livello

Incluso il totale complessivo di tutte le visualizzazioni dei topic sul forum dall’inizio.

/* SELECT esterno per nascondere la colonna artificiale di ordinamento e ordinare in base ad essa. */
SELECT "Categoria", "Visualizzazioni"
FROM (

    /* Visualizzazioni per categoria di primo livello. */
    SELECT 
        topcat AS "Categoria", 
        SUM(views) AS "Visualizzazioni",
        0 AS sortorder /* Colonna di ordinamento artificiale, qui per posizionarla all'inizio. */
    
    FROM (
        /* Visualizzazioni dei topic nelle categorie di sottolivello. */
        SELECT
            topcat.name AS topcat, SUM(topics.views) AS views
        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
    
        /* Visualizzazioni dei topic nelle categorie di primo livello (esclusi i sottolivelli). */
        SELECT
            topcat.name AS topcat, SUM(topics.views) AS views
        FROM topics 
            INNER JOIN categories topcat ON topics.category_id = topcat.id
        WHERE topcat.parent_category_id IS NULL
        GROUP BY topcat.name
    ) AS views_by_cat
    GROUP BY topcat
    
    UNION
    
    /* Aggiunta di una riga TOTALE alla fine. */
    SELECT 
        'TOTALE COMPLESSIVO' AS "Categoria",
        SUM(topics.views) AS "Visualizzazioni",
        1 AS sortorder /* Colonna di ordinamento artificiale, qui per posizionarla alla fine. */
    FROM
        topics
    GROUP BY "Categoria"
    
    /* Ordina l'output per categoria o per visualizzazioni. Abilita una di queste opzioni: */
    /* ORDER BY topcat, subcat */
    ORDER BY "Visualizzazioni" DESC

) AS views_by_cat_with_total

ORDER BY sortorder, "Categoria"