我有以下查询:
with D1 as (
select v06.ID
,AVG(TD.A) as A_avg
,AVG(TD.B) as B_avg
from v06
inner join v07 TD
on v06.ID= TD.ID
and v06.timestamp= TD.timestamp
where v06.X is not NULL
group by v06.ID
)
select * from D1
现在我按v06.ID分组。但是,我想要的是保留v06的所有字段,同时只添加表TD中的两个平均值。所以我试过了:
with D1 as (
select v06.*
,AVG(TD.A) as A_avg
,AVG(TD.B) as B_avg
from v06
inner join v07 TD
on v06.ID= TD.ID
and v06.timestamp= TD.timestamp
where v06.X is not NULL
group by v06.*
)
select * from D1
但是这给了我在select语句中的'非法符号*'。有谁知道如何实现这个目标?
答案 0 :(得分:1)
作为评论之一,您不能在选择中有一列不在GROUP BY
子句中或在聚合函数中使用。
试试这个:
with D1 as (
select v06.ID
,AVG(TD.A) as A_avg
,AVG(TD.B) as B_avg
from v06
inner join P.B90T75 TD
on v06.ID= TD.ID
and v06.timestamp= TD.timestamp
where v06.X is not NULL
group by v06.ID
)
select d2.*, d1.a_avg, d1.b_avg
from D1
join v06 D2
on d1.id = d2.id
答案 1 :(得分:0)
或者,如果可用/支持[未知,如果没有提及OP中的DB2平台或发行版,甚至包括特定于平台的DB2标记],也许是以下查询。注意:根据需要删除或调整DEC铸造标量;我只选择 small 值来获得更好的报告大小我的样本数据,因为没有带有样本数据的DDL,也没有OP中提供的预期结果可用于测试:
select a.*
, dec( avg(a) over(partition by a.id ) , 11 ) as avg_a
, dec( avg(b) over(partition by a.id ) , 11 ) as avg_b
from v06 as a
join v07 as b
on a.id = b.id
and a.timestamp = b.timestamp
where x is not null
order by id