如何在 PostgreSQL 数据库中正确聚合日期?
How correctly aggregate date in PostgreSQL database?
我在 PostgreSQL 数据库中有 table。
下面的table显示的是英国各城市地铁站的每小时列车运行速度:
DATE_KEY | STATION | CITY | SPEED
-------------------------------------------------------
2018-10-01 00:00:00 | Arsenal | London | 1078.125
2018-10-01 01:00:00 | Arsenal | London | 877.222
2018-10-01 02:00:00 | Arsenal | London | 1127.752
2018-10-01 00:00:00 | Beckton | London | 2866.375
2018-10-01 01:00:00 | Beckton | London | 1524.375
2018-10-01 02:00:00 | Beckton | London | 1618.533
2018-10-01 00:00:00 | Chesham | Liverpool | 1567.588
2018-10-01 01:00:00 | Chesham | Liverpool | 792.333
2018-10-01 02:00:00 | Chesham | Liverpool | 1138.857
2018-10-01 00:00:00 | Farringdon | Liverpool | 1543.625
2018-10-01 01:00:00 | Farringdon | Liverpool | 538.666
2018-10-01 02:00:00 | Farringdon | Liverpool | 1587.583
我正在尝试获取这样的汇总数据:
DATE_KEY | CITY | AVG_SPEED
----------------------------------------------------
2018-10-01 00:00:00 | London | 852.125
2018-10-01 01:00:00 | London | 750.222
2018-10-01 02:00:00 | London | 625.752
2018-10-01 00:00:00 | Liverpool | 804.588
2018-10-01 01:00:00 | Liverpool | 792.333
2018-10-01 02:00:00 | Liverpool | 952.857
换句话说,我需要这个城市的火车每小时平均速度 (AVG)。
我认为您只需要将 AVG 函数与 group by 子句一起使用,例如:
SELECT DATE_KEY, CITY, AVG(SPEED) as AVG_SPEED
FROM table
GROUP BY DATE_KEY, CITY
我知道问题中提到的数据集是小时值,如果你想计算不同时间戳的平均值(比如“2018-10-01 02:45:08”),那么你可以计算每小时的平均速度像这样 -
select DATE_TRUNC('day', a.DATE_KEY)+cast(DATE_PART('hour',a.DATE_KEY) as Integer)/1*INTERVAL '1 hour' as hour_key, city, avg(speed) as avg_speed
FROM table1 a group by 1, 2;
我在 PostgreSQL 数据库中有 table。
下面的table显示的是英国各城市地铁站的每小时列车运行速度:
DATE_KEY | STATION | CITY | SPEED
-------------------------------------------------------
2018-10-01 00:00:00 | Arsenal | London | 1078.125
2018-10-01 01:00:00 | Arsenal | London | 877.222
2018-10-01 02:00:00 | Arsenal | London | 1127.752
2018-10-01 00:00:00 | Beckton | London | 2866.375
2018-10-01 01:00:00 | Beckton | London | 1524.375
2018-10-01 02:00:00 | Beckton | London | 1618.533
2018-10-01 00:00:00 | Chesham | Liverpool | 1567.588
2018-10-01 01:00:00 | Chesham | Liverpool | 792.333
2018-10-01 02:00:00 | Chesham | Liverpool | 1138.857
2018-10-01 00:00:00 | Farringdon | Liverpool | 1543.625
2018-10-01 01:00:00 | Farringdon | Liverpool | 538.666
2018-10-01 02:00:00 | Farringdon | Liverpool | 1587.583
我正在尝试获取这样的汇总数据:
DATE_KEY | CITY | AVG_SPEED
----------------------------------------------------
2018-10-01 00:00:00 | London | 852.125
2018-10-01 01:00:00 | London | 750.222
2018-10-01 02:00:00 | London | 625.752
2018-10-01 00:00:00 | Liverpool | 804.588
2018-10-01 01:00:00 | Liverpool | 792.333
2018-10-01 02:00:00 | Liverpool | 952.857
换句话说,我需要这个城市的火车每小时平均速度 (AVG)。
我认为您只需要将 AVG 函数与 group by 子句一起使用,例如:
SELECT DATE_KEY, CITY, AVG(SPEED) as AVG_SPEED
FROM table
GROUP BY DATE_KEY, CITY
我知道问题中提到的数据集是小时值,如果你想计算不同时间戳的平均值(比如“2018-10-01 02:45:08”),那么你可以计算每小时的平均速度像这样 -
select DATE_TRUNC('day', a.DATE_KEY)+cast(DATE_PART('hour',a.DATE_KEY) as Integer)/1*INTERVAL '1 hour' as hour_key, city, avg(speed) as avg_speed
FROM table1 a group by 1, 2;