【问题标题】:Merge rows with the same primary key and calculate average for new value合并具有相同主键的行并计算新值的平均值
【发布时间】:2018-12-23 19:27:17
【问题描述】:
我有一个如下所示的表格:
如上图所示,主键由 intervalstart 和 edgeid 组成。我现在要做的是导入具有相同 intervalstart 和相同 edgeid 的记录,但 avgvelocity、measurementcount 和 vehiclecount 具有不同的值。
但由于我想避免表中出现重复条目,因此我想将这些记录与重复键合并,并计算 avgvelocity、measurementcount 和 vehiclecount 列的平均值。
我已经找到了名为 MERGE 的 PostgreSQL 命令,但我无法弄清楚如何执行此操作。
提前非常感谢您!
【问题讨论】:
标签:
c#
mysql
database
postgresql
merge
【解决方案1】:
您需要查看MySQL GROUP BY 或PostgresSQL GROUP BY 子句才能执行您想要的操作。
SELECT intervalstart,edgeid, AVG(avgvelocity), AVG(measurementcount), AVG(vehiclecount)
FROM mytable GROUP BY intervalstart, edgeid
所有记录都按 intervalstart 和 edgeid 分组(“合并”),然后您可以使用聚合函数(例如 AVG)对未分组的列进行平均。
在 MySQL 中(我不知道 PostgresSQL)——如果你想要“day”列——你可以使用 ANY_VALUE 函数来获取它,它会从其中一行中获取一个值。
SELECT intervalstart,edgeid, ANY_VALUE(day), AVG(avgvelocity), AVG(measurementcount), AVG(vehiclecount)
FROM mytable GROUP BY intervalstart, edgeid