MYSQL Query - how to sum data by total, current year and last 12 months in the same query (1 sum by column)?

StackOverflow https://stackoverflow.com/questions/23592112

  •  20-07-2023
  •  | 
  •  

Domanda

I use a custom type post in my website and need to make a query that sum some data (integer columns). I`m able to do it but by month, current year and last 12 months, but not together (3 columns).

In other words:

I current have the following 3 queries and i want to join then in just one (three columns).

1) Query 1 (data sum by total)

    SELECT
        wp_postmeta.meta_value AS 'Tipo de aeronave',
        COUNT(wp_posts.ID) AS 'Total'
    FROM 
        wp_postmeta
    LEFT JOIN 
        wp_posts ON wp_postmeta.post_id = wp_posts.ID
    WHERE 
        wp_posts.post_type = 'ocorrencia'
        AND wp_posts.post_status = 'publish' 
        AND wp_postmeta.meta_key = 'tipo_de_aeronaves_envolvidas' 
    GROUP BY 
        wp_postmeta.meta_value

This query generates:

Tipo de aeronave                       Total (all data)
["Civil estrangeira"]                1
["Civil nacional","Militar nacional"]    3
["Civil nacional"]                      157
["Militar nacional"]                 38
["Nao aplicavel"]                        76

The second query is (sum data over last 12 months):

    SELECT
    wp_postmeta.meta_value AS 'Tipo de aeronave',
    COUNT(wp_posts.ID) AS 'Total'

    FROM wp_postmeta
        left JOIN wp_posts
        ON wp_postmeta.post_id = wp_posts.ID

    WHERE wp_posts.post_type = 'ocorrencia'
    AND wp_posts.post_status = 'publish' 
    AND wp_postmeta.meta_key = 'tipo_de_aeronaves_envolvidas' 
    AND wp_posts.post_date >= (CURRENT_DATE - INTERVAL 12 month) 

    GROUP BY wp_postmeta.meta_value

That generates:

    Tipo de aeronave                    Total (12 months)
    ["Civil estrangeira"]                   1
    ["Civil nacional","Militar nacional"]   3
    ["Civil nacional"]                  157
    ["Militar nacional"]                    38
    ["Nao aplicavel"]                   73

The 3rd query is (sum current year`s data):

    SELECT
    wp_postmeta.meta_value AS 'Tipo de aeronave',
    COUNT(wp_posts.ID) AS 'Total'

    FROM wp_postmeta
    left JOIN wp_posts
    ON wp_postmeta.post_id = wp_posts.ID

    WHERE wp_posts.post_type = 'ocorrencia'
    AND wp_posts.post_status = 'publish' 
    AND wp_postmeta.meta_key = 'tipo_de_aeronaves_envolvidas' 
    AND YEAR(wp_posts.post_date) = YEAR(CURRENT_DATE)

    GROUP BY wp_postmeta.meta_value

That generates:

    Tipo de aeronave                    Total (current year)
    ["Civil nacional","Militar nacional"]   1
    ["Civil nacional"]                  59
    ["Militar nacional"]                    19
    ["Nao aplicavel"]                   19

Finally, what i want, a query that join all results in one!

    Tipo de aeronave              Total (all data) Total (last 12 months) Total (current year)
     ["Civil estrangeira"]                   1               1                  0
     ["Civil nacional","Militar nacional"]    3              3                  1
    ["Civil nacional"]                  157            157                  59
    ["Militar nacional"]                    38              38                  19
    ["Nao aplicavel"]                   73              73                  19

Tx a lot!

È stato utile?

Soluzione

SELECT wp_postmeta.meta_value AS Tipo de aeronave , COUNT(wp_posts.ID) AS Total , COUNT( CASE WHEN YEAR(wp_posts.post_date) = YEAR(CURRENT_DATE) THEN 1 END ) AS TOT_CURR_YR , COUNT( CASE WHEN wp_posts.post_date >= (CURRENT_DATE - INTERVAL 12 month) THEN 1 END ) AS TOT_LAST_12_MONTHS FROM wp_postmeta LEFT JOIN wp_posts ON wp_postmeta.post_id = wp_posts.ID WHERE wp_posts.post_type = 'ocorrencia' AND wp_posts.post_status = 'publish' AND wp_postmeta.meta_key = 'tipo_de_aeronaves_envolvidas' GROUP BY wp_postmeta.meta_value

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top