2

の句をCASE使用するステートメントに基づいて単一の平均を入力しようとしていますが、グループ関数エラー コード 1111 の無効な使用が返されます。WHEREMONTHSCOUNT

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'

追加を追加すると、GROUP BY MONTH各月のTSCOREを正しく識別します...それらすべてのTSCOREの平均を1つ吐き出すだけです。

GROUP BY MONTH、それは吐き出します:

   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

上記の表に基づいて、アイテムの平均 TSCORE だけを吐き出すデータを希望します (したがって、1 行の情報のみ)。

cnt   ITEM          TSCORE
20    WARI-BB150     0.55
4

1 に答える 1

4

FROM句でサブクエリを使用し、AVGその上にを作成する必要がありました。

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
于 2012-10-12T20:05:07.890 に答える