MySql选择CASE语句组错误的平均值

MySql选择CASE语句组错误的平均值,mysql,select,group-by,case,average,Mysql,Select,Group By,Case,Average,我试图根据CASE语句,利用带有计数月数的WHERE子句填充单个平均值,但它返回了无效的组函数使用错误代码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(ORD

我试图根据CASE语句,利用带有计数月数的WHERE子句填充单个平均值,但它返回了无效的组函数使用错误代码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'
我更希望数据仅显示基于上表的一个项目的平均TSCORE,因此只有一行信息:

cnt   ITEM          TSCORE
20    WARI-BB150     0.55

我必须在FROM子句中使用一个子查询,并在该子查询上创建一个AVG:


我必须在FROM子句中使用一个子查询,并在该子查询上创建一个AVG:


您正试图在AVG中使用COUNT*。要做到这一点,您需要两个查询,一个可能嵌套在另一个查询中,另一个可能作为子查询的联接。[您不能在单个查询中聚合聚合。]如果您提供示例输入数据和示例所需结果,则我们可以推荐解决方案。这是有意义的,据我所知,我相信我必须在from..ie中使用子查询。从SELECT CASE avg_t Core中选择AVGavg_t Core当…宾果,我使用您提供的子查询获得它,请参阅我的答案。您正在尝试在avg中使用COUNT*。要做到这一点,您需要两个查询,可能一个嵌套在另一个中,可能作为子查询的联接。[您不能在单个查询中聚合聚合。]如果您提供示例输入数据和示例所需结果,则我们可以推荐解决方案。这是有意义的,据我所知,我相信我必须在from..ie中使用子查询。从SELECT CASE avg_TSCORE中选择AVGavg_TSCORE当…宾果,我使用您提供的子查询获得它,请参阅我的答案。
cnt   ITEM          TSCORE
20    WARI-BB150     0.55
SELECT
t2.ITEM as Item,
AVG(t2.TSCORE) as AvgTSCORE
FROM 
(SELECT count(ORDER_NUMBER) as cnt, t3.ITEM, MONTH(TRANS_DATE) as Month, 
(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 t3
JOIN ATTRIBUTES a
    ON a.ITEM = t3.ITEM
WHERE `TRANS_DATE` BETWEEN DATE_SUB(CURDATE(), INTERVAL 365 DAY) AND CURDATE()
AND t3.ITEM = 'WARI-BB150'
GROUP BY MONTH
) t2
Item         AvgTSCORE
WARI-BB150   0.55000