简体   繁体   中英

MYSQL - get a row for each year, with total sum for each month

I have a table of transactions for purchases. Each transaction has a timestamp and purchase amount (in USD).

I'm trying to create some stats from this. I'd like to extract a row for each year that contains the sum for each month in the year. (I'd like months with no transaction to sum to 0 - not omitted.)

I know I could just do a plain SELECT of everything and process it in PHP, but I was wondering if it was at all possible to make MySQL do the work and extract the data like I want it?

What I'd like to see is rows like:

Year, Total_Jan, Total_Feb, ... Total_Dec, Total_Year

I am able to get the total per year, but I can't work out how to get the total per month into the same row.

SELECT
  YEAR(dt) as the_year,
  SUM(mc_gross) AS sum_total
FROM
  transactions
GROUP BY
  the_year
SELECT
  YEAR(dt) as the_year,
  SUM(CASE WHEN MONTH(dt) = 1 THEN mc_gross ELSE 0 END) AS Total_Jan,
  SUM(CASE WHEN MONTH(dt) = 2 THEN mc_gross ELSE 0 END) AS Total_Feb,
  ...
  SUM(CASE WHEN MONTH(dt) = 12 THEN mc_gross ELSE 0 END) AS Total_Dec
FROM
  transactions
GROUP BY
  the_year;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM