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
MYSQL Query - how to sum data by total, current year and last 12 months in the same query (1 sum by column)?
-
20-07-2023 - |
题
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!
解决方案
不隶属于 StackOverflow