从同一组中选择平均值,在另一组中选择多个列的最大值

ercv8c1e  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(449)

我很难为一组相同的fix\u id值选择一个平均值,而另一列的最大值最终有人帮了我,我得到了这段代码

select fix_id
     , timestamp
     , avg(age)
  from t
 where age > 0 
   and timestamp = 
  (select max(t2.timestamp) 
    from t t2 
   where t2.fix_id = t.fix_id)
group by fix_id;

但是,我需要为几个列选择相同的方法avg值,我想知道是否有一种方法可以在一个查询中实现。我能做到

avg(age),avg(height)

但由于我跳过了年龄值为0的行,列高将丢失这些行。

rfbsl7qr

rfbsl7qr1#

使用条件聚合:

select fix_id, timestamp,
       avg(case when age > 0 then age end) as avg_age,
       avg(height) as avg_height
from t
where timestamp = (select max(t2.timestamp) from t t2 where t2.fix_id = t.fix_id)
group by fix_id;

相关问题