任何人都可以建议我,这是在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秒
答案 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”
总时间的数据类型是间隔。