I am trying to populate a single average based off a CASE statement utilizing a WHERE clause with MONTHS of a COUNT, however it is returning an invalid use of group function Error Code 1111:
SELECT
count(ORDER_NUMBER) as cnt,
a.ITEM,
MONTH(TRANS_DATE) as Month,
AVG(CASE
WHEN count(ORDER_NUMBER) IS NULL THEN 0
WHEN count(ORDER_NUMBER) < 1 AND a.CAT != 'E' THEN 0
WHEN count(ORDER_NUMBER) < 1 AND a.CAT = 'E' THEN .05
WHEN count(ORDER_NUMBER) >= 1 AND count(ORDER_NUMBER) < 4 AND a.CAT = 'E' THEN .5
WHEN count(ORDER_NUMBER) >= 4 AND a.CAT = 'E' THEN 1
WHEN count(ORDER_NUMBER) <= 5 AND a.CAT != 'E' THEN .05
WHEN count(ORDER_NUMBER) >= 6 AND count(ORDER_NUMBER) < 11 AND a.CAT != 'E' THEN .25
WHEN count(ORDER_NUMBER) >= 11 AND count(ORDER_NUMBER) < 21 AND a.CAT != 'E' THEN .5
WHEN count(ORDER_NUMBER) >= 21 AND a.CAT != 'E' THEN 1 END) as TSCORE
FROM trx.TRX_Import t2
JOIN ATTRIBUTES a
ON a.ITEM = t2.ITEM
WHERE `TRANS_DATE` BETWEEN DATE_SUB(CURDATE(), INTERVAL 365 DAY) AND CURDATE()
AND t2.ITEM = 'WARI-BB150'
When I add the additional GROUP BY MONTH It correctly identifies each months TSCORE…I would rather it just spit out one AVERAGE of all those TSCORES.
With GROUP BY MONTH, it spits out:
cnt ITEM Month TSCORE
1 WARI-BB150 1 0.5
2 WARI-BB150 2 0.5
1 WARI-BB150 3 0.5
2 WARI-BB150 4 0.5
2 WARI-BB150 5 0.5
2 WARI-BB150 6 0.5
4 WARI-BB150 7 1
2 WARI-BB150 10 0.5
3 WARI-BB150 11 0.5
1 WARI-BB150 12 0.5
I would prefer the data to spit out just the average TSCORE of an item based of the above table (so only 1 row of info):
cnt ITEM TSCORE
20 WARI-BB150 0.55
I had to use a subquery in the
FROMclause and create anAVGon that:Spits out: