首页 > 解决方案 > 从每个组中选择一列中具有相同值而另一列中具有最大值的平均值

问题描述

我一直在努力寻找答案,但似乎没有人遇到与我类似的问题,所以我决定在这里发布。
我有一个包含 200 条记录的表,列中有重复值fix_id,在列时间戳中,每条记录的值都在 1 到 5 之间,在最后一列中我得到了年龄值。
我喜欢为每个组选择具有相同 id 的fix_id列,同时在时间戳列中保持最大值,年龄列的平均值,并且有一个棘手的问题是年龄列有时可以具有值 0,在这种情况下,我喜欢跳过这个值。

 fix_id   timestamp  age
  10         2        0
  10         2        2
  10         4        0
  10         4        1
  10         4        3
  5          4        2
  5          4        4
  5          3       10

所以从这张表中,我想得到这个结果

 fix_id    timestamp   age
  10          4         2
  5           4         3

因此,如果年龄列中有 0,我不想在计算平均值时包含它。
这可能吗?

标签: phpmysqlsqljoinselect

解决方案


一种方法是带有过滤的聚合查询:

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;

推荐阅读