【发布时间】:2016-07-12 05:56:42
【问题描述】:
我有一个 POS 交易数据表,我正在尝试汇总我们的一些购买信息。样本可能看起来像
pID (int) | pDate (varchar) | pAmount(numeric) | pCode(varchar)
1 | 01-NOV-14 | 12.67 | ELECTRONIC
2 | 01-NOV-14 | 61.89 | HOUSEWARE
3 | 01-NOV-14 | 52.25 | ELECTRONIC
4 | 02-NOV-14 | 9.12 | HOUSEWARE
5 | 02-NOV-14 | 17.11 | ELECTRONIC
6 | 03-NOV-14 | 39.88 | HOUSEWARE
7 | 03-NOV-14 | 21.60 | ELECTRONIC
8 | 03-NOV-14 | 16.78 | HOUSEWARE
9 | 04-NOV-14 | 47.29 | HOUSEWARE
我的目标是计算按类别分组的平均每日销售额。我的问题是每天的销售条目数量不一致,所以我需要在汇总之前获取每个类别的每日总和。
对于本示例,我的目标是生成按代码分组的每日平均值的查询:
SalesItem | AverageDailySales
ELECTRONIC | 25.91
HOUSEWARE | 43.74
但是,由于并非所有日期都有所有类别的销售额,因此计算每个类别的每日总和并取平均值是行不通的:查询
SELECT s.pCode AS SalesItem, TO_CHAR(AVG(s.TotalDaySales), '999.99') AS AverageDailySales
FROM (SELECT t.pDate, t.pCode, SUM(t.pAmount) as TotalDaySales
FROM Pos_Transactions t
GROUP BY t.pDate, t.pCode) s
GROUP BY s.pCode ORDER BY s.pCode;
产量
SalesItem | AverageDailySales
ELECTRONIC | 34.54
HOUSEWARE | 43.74
这忽略了 11 月 4 日没有进行电子销售的事实,这意味着每天的平均销售量更高。
使用 AVG 计算时如何处理丢失的条目?
【问题讨论】:
标签: sql aggregate missing-data