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

时间:2019-11-07 02:11:45

标签: postgresql aggregate-functions

我有一张表,允许用户存储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)

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

2 个答案:

答案 0 :(得分:2)

使用FILTER clause,例如:

QStandardPaths::AppDataLocation

答案 1 :(得分:0)

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

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,以免平均考虑该元素。