I'm new to MySQL and need your help to figure out a query so I can calculate the average of each quarter. I have a table called USretail92_21 that looks like this (from 1992 to 2021):
Date | Sales |
---|---|
1992-01-01 | 701.0 |
1992-02-01 | 658.0 |
1992-03-01 | 731.0 |
1992-04-01 | 816.0 |
1992-05-01 | 856.0 |
1992-06-01 | 853.0 |
1992-07-01 | 101.0 |
1992-08-01 | 558.0 |
1992-09-01 | 431.0 |
Consider the date format 1992-01-01 means Jan. 1992. Now I run the below query to get the quarter and month:
select year(date) as Year,monthname(date)as Month, quarter(date) as Quarter, sales from USretail92_21 where kind="Men's clothing stores" order by 1
and that gives me this view:
Year | Month | Quarter | Sales |
---|---|---|---|
1992 | January | 1 | 701.0 |
1992 | February | 1 | 658.0 |
1992 | March | 1 | 731.0 |
1992 | April | 2 | 816.0 |
1992 | May | 2 | 856.0 |
1992 | June | 2 | 853.0 |
Now my question to you is how can I get the average sales per quarter and have an output that looks like this:
Quarter | Year | AverageSales |
---|---|---|
1 | 1992 | 696 (average for Jan/Feb/March) |
2 | 1992 | 841 |
eventually, I want to have a graph with Python to see sales as Y and "Q1_92 to Q4_21" as X axis
CodePudding user response:
You need to use GROUP BY
to calculate aggregates like sums and averages.
Working from your example:
WITH SalesPerMonth AS (
select year(date) as Year,
monthname(date)as Month,
quarter(date) as Quarter,
sales from USretail92_21
where kind="Men's clothing stores"
)
SELECT Quarter, Year, AVG(Sales) AS AverageSales
FROM SalesPerMonth
GROUP BY Quarter, Year
Or alternatively do it all at once:
select year(date) as Year,
quarter(date) as Quarter,
AVG(sales) AverageSales
from USretail92_21
where kind="Men's clothing stores"
group by year(date),
quarter(date)