Say you had this:

Spays and neuters over a period of time.
Query looks like:
SELECT sn_sub.spay_neuter, Sum(sn_sub.quantity) AS SumOfquantity, Sum(sn_sub.cu_amount) AS SumOfcu_amount
FROM spayneuter LEFT JOIN sn_sub ON spayneuter.id = sn_sub.pa_id
GROUP BY sn_sub.spay_neuter;
But you want average of all spays neuters combined.
You average the whole above query.
SELECT Sum(SumOfquantity/12) AS tsum
FROM (SELECT sn_sub.spay_neuter, Sum(sn_sub.quantity) AS SumOfquantity, Sum(sn_sub.cu_amount)
AS SumOfcu_amount FROM spayneuter LEFT JOIN sn_sub ON spayneuter.id=sn_sub.pa_id
GROUP BY sn_sub.spay_neuter) AS myaverage;
Notice
I use same query, but do an entire average over the SumOfquantity
I divided by 12 for monthly average, just quick test data.
Results in
per month all combined
You can query a query in other words
I'll give another maybe better example:
If you had this:

Just a list of owners and count of their pets.
Query
SELECT dc_powners.ownerid, dc_powners.oname,
COUNT(dc_pets.petid)
AS CountOfpetid
FROM dc_powners LEFT JOIN dc_pets ON
dc_powners.ownerid = dc_pets.ownerid
GROUP BY dc_powners.ownerid
ORDER BY dc_powners.oname;
But you want the average number of pets per person.
It would be the
(sum of pets) divided by (number of owners)
So again, query a query.
SELECT COUNT(ownerid) AS number_of_owners, SUM(CountOfpetid) AS total_pets,
(SUM(CountOfpetid) / COUNT(ownerid)) AS average_pet_per_person FROM
(SELECT dc_powners.ownerid, dc_powners.oname,
COUNT(dc_pets.petid)
AS CountOfpetid
FROM dc_powners LEFT JOIN dc_pets ON dc_powners.ownerid = dc_pets.ownerid
GROUP BY dc_powners.ownerid
ORDER BY dc_powners.oname) AS od;
It gives:

Take note of this part
SELECT COUNT(ownerid) AS number_of_owners, SUM(CountOfpetid) AS total_pets,
(SUM(CountOfpetid) / COUNT(ownerid)) AS average_pet_per_person FROM
It is placed above original group by query. Again, all this does is "query a query" for greater detail.
Notice the math is done right in the query.
The data here is just test data I use.