【发布时间】:2016-06-11 03:36:55
【问题描述】:
在弄清楚如何进行这些查询时遇到了一些麻烦。
一般来说我有一张桌子
- sales_ID
- Employee_ID
- 销售日期
- 销售价格
我想要做的是有一个视图,显示每个销售项目的员工在销售日期前 1 年的平均销售额。
示例:假设我在销售表中有这个
sales_ID employee_id sale_date sale_price
1 Bob 2016/06/10 100
2 Bob 2016/01/01 75
3 Bob 2014/01/01 475
4 Bob 2015/12/01 100
5 Bob 2016/05/01 200
6 Fred 2016/01/01 30
7 Fred 2015/05/01 50
对于 sales_id 1 记录,我想将 Bob 的所有销售额从一年内拉到销售当月(所以 2015-05-01 到 2016-05-31 有 75、100、200 的 3 个销售)所以最终输出将是
sales_ID employee_id sale_date sale_price avg_sale
1 Bob 2016/06/10 100 125
2 Bob 2016/01/01 75 275
3 Bob 2014/01/01 475 null
4 Bob 2015/12/01 100 475
5 Bob 2016/05/01 200 87.5
6 Fred 2016/01/01 30 50
7 Fred 2015/05/01 50 null
我尝试做的是这样的
select a.sales_ID, a.sale_price, a.employee_ID, a.sale_date, b.avg_price
from sales a
left join (
select employee_id, avg(sale_price) as avg_price
from sales
where sale_date between Date(VARCHAR(YEAR(a.sale_date)-1) ||'-'|| VARCHAR(MONTH(a.sale_date)-1) || '-01')
and Date(VARCHAR(YEAR(a.sale_date)) ||'-'|| VARCHAR(MONTH(a.sale_date)) || '-01') -1 day
group by employee_id
) b on a.employee_id = b.employee_id
哪个DB2 不喜欢在子查询中使用父表a,但是我想不出如何正确编写这个查询。有什么想法吗?
【问题讨论】:
-
(1) 给定查询中的问题是什么。你有什么错误吗?内部查询是否可以自行正常运行? (2) 能否给出一些样本数据和预期输出?
-
不识别 a.sale_date 错误 SQLCODE = -204 和 SQLSTATE=42704 将使用示例编辑问题
-
这仍然令人困惑。
Bob的3销售有不同的sales_id?这些应该是什么输出?请举例说明至少有 2 名员工的销售额不同,以及您在所有行上的预期输出。 -
不,我不知道如何编写 where 子句,它只查找行中销售项目仅 1 年前的项目。
-
对于
sales_id=2,平均销售额如何275。你能解释一下它的数学原理吗?