PostgreSQL:对年龄的两个值求和

PostgreSQL: SUM two values from age

我正在尝试对使用 PostgreSQL 中的 AGE 函数计算的两个值求和。 AGE 应该是计算得出的与该列中不同 (session) 值相关联的 MAX 和 MIN 值(Session 值是不同的)。 AGE 函数应该从 (date_time) 列中提取分钟数,然后从 (date_time) 列中提取小时数,然后将该值乘以 60,然后将这些值相加得到总分钟数session.

我能够通过

成功做到这一点
SELECT 
session, organization, username,
((date_part('hour',age(MAX(date_time), Min(date_time)))*60) + date_part('minute',age(MAX(date_time),
Min(date_time)))) AS Duration
FROM 
analysis.user_activity
enter code here

但是,现在我正在尝试能够根据 GROUP(组织)持续时间的总和来按该函数 returns 的数字的总和进行排序,只需执行 ORDER BY(持续时间)按上面计算的最大单个值排序,而不是按组的整个聚合。这就是问题的开始。首先,我尝试如下:

SELECT
SUM(
(date_part('hour',age(MAX(date_time), Min(date_time)))*60),
date_part('minute',age(MAX(date_time), Min(date_time)))) as SumofDuration
FROM
analysis.user_activity

我得到这个错误:错误:函数总和(双精度,双精度)不存在提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。位置:137。我也收到了关于你不能嵌套聚合函数的错误,所以我把我的 SELECT 分成多个步骤,现在我有如下。

SELECT
session, organization, username,
SUM((SELECT date_part('hour',age(MAX(date_time), Min(date_time)))::integer*60
FROM analysis.user_activity)
, 
(SELECT date_part('minute',age(MAX(date_time), Min(date_time)))::integer
FROM analysis.user_activity))

来自 analysis.user_activity

但是,这也给我错误 错误:函数总和(整数,整数)不存在 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。位置:169。我也尝试过使用 numeric 类型。根据文档 https://www.postgresql.org/docs/8.2/functions-aggregate.html,这应该能够对我的函数生成的三种数据类型中的任何一种求和。那怎么了?

提前致谢。

我认为你把事情复杂化了。如果我没看错的话,你可以这样做:

select session, organization, username,
    extract(epoch from max(date_time) - min(date_time)) / 60 duration_minutes
from analysis.user_activity
group by session, organization, username

理由:max(date_time) - min(date_time)给你一个区间;您可以使用 extractepoch 将其转换为秒数,然后将结果除以 60 将其转换为分钟。

请注意,我还修复了缺少 group by 子句的聚合查询。如果要对所有会话的持续时间求和,则添加另一个聚合级别:

select sum(duration_seconds) / 60 total_duration_minutes
from (
    select extract(epoch from max(date_time) - min(date_time)) duration_seconds
    from analysis.user_activity
    group by session, organization, username
) t