1 か月あたりの平均料金を計算するスクリプトを実行することになっています。以下のスクリーン ショットでは、受け取るべき平均値を確認できます。
OP_Yearly
counter charge minutes
Oct 2012 1 5.16 1.32
Nov 2012 1 54.44 14.42
Dec 2012 0 0.00 0.00
Average: 19.86464 5.246666667
ただし、問題は、この平均値を受け取ることです。請求額は、値がゼロの月で割られていません。
OP_Yearly
counter charge minutes
Oct 2012 1 5.16 1.32
Nov 2012 1 54.44 14.42
Dec 2012 0 0.00 0.00
Average: 29.79696 7.87
これは私のスクリプトです -
SELECT op,
SUM (counter) AS counter,
AVG (NVL (Charge_SDR, 0)) AS AVERAGE_CHARGE_SDR_YTD,
AVG (NVL (Minutes, 0)) AS AVERAGE_MINUTES_YTD
FROM (
SELECT t.op AS op,
COUNT (DISTINCT t.im) AS counter,
(SUM (t.charge / POWER (10, t.decimals))) AS Charge_SDR,
CAST (SUM (t.duration / 60) AS NUMBER (10, 2)) Minutes
FROM top t, oper o
WHERE t.op = o.op AND timestamp LIKE '201210%' AND o.TYPE = 'M'
GROUP BY t.op,
UNION ALL
SELECT t.op AS op,
COUNT (DISTINCT t.im) AS counter,
(SUM (t.charge / POWER (10, t.decimals))) AS Charge_SDR,
CAST (SUM (t.duration / 60) AS NUMBER (10, 2)) Minutes
FROM top t, oper o
WHERE t.op = o.op AND timestamp LIKE '201211%' AND o.TYPE = 'M'
GROUP BY t.op,
UNION ALL
SELECT t.op AS op,
COUNT (DISTINCT t.im) AS counter,
(SUM (t.charge / POWER (10, t.decimals))) AS Charge_SDR,
CAST (SUM (t.duration / 60) AS NUMBER (10, 2)) Minutes
FROM top t, oper o
WHERE t.op = o.op AND timestamp LIKE '201212%' AND o.TYPE = 'M'
GROUP BY t.op, )
GROUP BY op;
3ヶ月で割る(sum(Charge_SDR)/3)と簡単に作れますが、NVL関数でのやり方が知りたいです。スクリプト NVL に含めましたが、値がゼロの今月はキャッチされません。それを修正する方法はありますか?事前に助けてくれてありがとう