sql - postgresql中group by的奇怪行为
问题描述
我不知道如何描述这种情况。我正在尝试使用 PostGIS 扩展从存储在 PotgreSQL 中的一组 GPS 点计算速度的最大值、平均值和最小值。
我写了以下查询:
WITH foo1 AS(
SELECT *,timestamp_epoch t2, LAG(timestamp_epoch) OVER(PARTITION BY trip ORDER BY timestamp_epoch) t1
,geom g2, LAG(geom) OVER(PARTITION BY trip ORDER BY timestamp_epoch) g1
FROM trips_points
--WHERE trip = 9
)
, speeds AS (
SELECT * ,t2-t1 delta_t, ST_Distance(g2,g1) dist, ((ST_Distance(g2,g1))/(t2-t1))*3.6 speed_km_per_h
FROM foo1
)
SELECT trip, AVG(speed_km_per_h), MIN(speed_km_per_h), MAX(speed_km_per_h), COUNT(speed_km_per_h)
FROM speeds
GROUP BY trip
我使用 LAG() 查找上一个 GPS 点,并使用 epoch 对类似于原始行程的点进行排序。然后,我使用先前的时间值和先前的几何图形来计算两点之间的速度。当我运行此查询时,我看到以下结果:
我看到第 9 次行程的最高速度是 192!当我检查这次旅行中的所有速度值时,我没有看到这个值!所以我想问题应该出在 MAX() 聚合函数上。然后,我通过在查询的第 5 行取消注释“WHERE trip = 9”,仅选择了第 9 次行程的点。然后令人惊讶的是,结果是正确的!
这是我在速度表中手动看到的正确最大值。我不明白这是怎么回事!!100个行程中,有5个有同样的问题,其他的都是对的!这里有什么问题?
解决方案
推荐阅读
- javascript - 如何找到相邻元素?
- android - Android SmsManager 从 sqlite 数据库向多个收件人发送消息
- react-native - WebStorm 自动完成和自动导入不起作用
- android - Android:如何在模拟器等真实设备中查看应用程序日志?
- angular - 在从英语键入另一种语言时切换键盘键
- google-cloud-platform - 如何防止 GCP 上 Mautic 的未知页面点击
- excel - 如何获得 MSForms.ComboBox 对象所在的用户窗体?
- blockchain - 在超级账本作曲家中启动业务网络时,我遇到了错误
- maven - IntelliJ 没有通过 Manifest.MF 看到依赖项
- reactjs - 打字稿/反应。如何检查内部函数的返回值