Postgres-基于列的值的不同聚合

我有一张表,允许用户存储devices的不同指标。 devices可以是不同的类型(例如IoT),并且具有不同的指标。

例如车队跟踪设备可能具有speeddistanceTravelledtripDuration,而农业传感器可能具有temperaturehumidity

请注意,单个资产中不一定有相同数量的指标。例如tripDuration每天可能仅更新几次,而speed可能每分钟更新两次。

create table metric_history
(
  device_id     uuid not null,timestamp     timestamp,metric_name   text,value         double precision
);

我目前正在使用允许用户在其设备上运行自定义历史报告的系统。这些报告是汇总报告。

例如,跟踪车队的客户可能希望创建一份报告,显示其本周每个设备的情况:

  • 最大速度:MAX(speed)
  • 平均速度:AVG(speed)
  • 旅行次数:COUNT(tripDuration)
  • 平均旅行时长:AVG(tripDuration)

我将如何查询类似的内容(希望能有效地进行查询)?努力想出办法解决问题。

veralan329 回答:Postgres-基于列的值的不同聚合

使用FILTER clause,例如:

QStandardPaths::AppDataLocation
,

如果要在同一选择中获得所有值,则可以执行以下操作:

SELECT MAX(CASE WHEN device_id=X THEN value ELSE 0 END) AS speed,AVG(CASE WHEN device_id=Y THEN value ELSE null END) AS tripDuration
  FROM metric_history

P.S .:在AVG中舍弃某个值时,您需要将其设置为null,以免平均考虑该元素。

本文链接:https://www.f2er.com/3147911.html

大家都在问