计算PostgreSql中时间列的总和

时间:2015-05-27 15:52:53

标签: postgresql sum

任何人都可以建议我,这是在POSTGRESQL找到时间字段求和的最简单方法。我只找到MYSQL的解决方案,但我需要POSTGRESQL版本。

MYSQL https://stackoverflow.com/questions/3054943/calculate-sum-time-with-mysql

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(timespent))) FROM myTable;

演示数据

id   time 
1   1:23:23
2   4:00:23
3   9:23:23

所需输出

14时47分09秒

3 个答案:

答案 0 :(得分:2)

你想要什么,是不可能的。但你可能误解了time type:它代表了一天中的精确时间点。添加两次(或更多次)没有多大意义。 f.ex. sum()(但一天中没有第28个小时)。

您可能需要的是interval(表示时间间隔;小时,分钟甚至数年)。 interval支持SELECT sum(interval_col) FROM my_table; 个参数。

如果你使用间隔,那就简单了:

time

虽然,如果您坚持使用interval类型(但您没有理由这样做),可以将其强制转换为SELECT sum(time_col::interval) FROM my_table; 进行计算:

interval

但同样,结果将是time,因为sum(time_col)值不能超过一天中的第24小时。

注意:PostgreSQL甚至会为你做演员表,所以interval也应该有效,但在这种情况下结果也是WITH insertuser AS ( INSERT INTO zorro.user (username, firstname, lastname, accountstatus, roles, creationdatetime) VALUES('test', 'test', 'test', 'test', 'test', current_timestamp) RETURNING id ), em as ( INSERT INTO zorro.email (address, confirmed, count, user_id) SELECT 'test', false, 1, id FROM insertuser RETURNING * ), p as ( INSERT INTO zorro.password (hash, count, user_id) SELECT 'test', 1, id FROM insertuser RETURNING * ), pn as ( INSERT INTO zorro.phone_number (number, confirmed, count, user_id) SELECT 'test', false, 1, id FROM insertuser RETURNING * ) INSERT INTO zorro.Question (text, answer, count, user_id) SELECT 'test', 'test', 1, id FROM insertuser;

答案 1 :(得分:1)

我在sql fieddle上试过这个解决方案: link

创建表:

CREATE TABLE time_table (
 id integer, time time
);

插入数据:

INSERT INTO time_table (id,time) VALUES
  (1,'1:23:23'),
  (2,'4:00:23'),
  (3,'9:23:23')

查询数据:

SELECT
  sum(s.time)
FROM 
  time_table s;

答案 2 :(得分:0)

如果您需要根据另一个字段计算某个字段的总和,可以执行以下操作:

select
    keyfield,
    sum(time_col::interval) totaltime
    FROM myTable
    GROUP by keyfield

输出示例: 关键字段总时间 “加百利”; “ 10:00:00” “约翰”; “ 36:00:00” “约瑟夫”; “ 180:00:00”

总时间的数据类型是间隔。