平均条件为Oracle

时间:2017-05-31 13:09:55

标签: sql oracle conditional-statements average

我从Oracle数据库中按照以下方式获取数据:

check          HR       Serie       Name
14:00:31    13:59:19    6120        A
14:10:31    13:59:21    6120        A
14:00:31    13:57:19    6120        A
14:04:01    14:02:00    6120        B
14:06:01    14:02:14    6120        B
14:04:01    14:04:00    6120        B
14:04:01    14:02:00    7100        A
14:08:01    14:03:00    7100        A
14:04:01    14:04:00    7100        A

我想计算每个系列和名称(两者)的列'HR'的平均值,但是如果只有列检查的值是相同的

结果将是:

check        AVG(HR)    Serie       Name
14:00:31    13:58:19    6120        A
14:00:31    14:03:00    6120        B
14:04:01    14:03:00    7100        A

这是我的代码:

SELECT 
  TO_CHAR(TRUNC(SysDate) + (AVG(TO_NUMBER(TO_CHAR(TO_DATE(TO_CHAR(HR, 'HH24:MI:SS'), 'HH24:MI:SS'), 'SSSSS')) / 60)) / 24 / 60, 'hh24:mi:ss'), Serie,Name 
from table 
group by Serie, name

问题是,即使值列检查不同,我也会计算平均值

2 个答案:

答案 0 :(得分:1)

check子句中加入GROUP BY并添加一个HAVING子句,用于检查重复项:

SELECT check,
       TO_CHAR( TRUNC( SYSDATE ) + AVG( HR - TRUNC( HR ) ), 'HH24:MI:SS' )
         AS "AVG(HR)",
       serie,
       name
GROUP BY check, serie, name
HAVING COUNT(*) > 1

答案 1 :(得分:0)

谢谢你的答案,但是有可能确定副本,因为对于每个系列和名称,我有4个结果,在最后我希望得到结果:

check          HR       Serie       Name
14:00:31    13:58:19    6120        A
14:12:31    14:03:00    6120        B
14:10:31    13:59:21    6120        A (duplicate)
14:04:01    14:03:00    6120        B (duplicate)

并且在得到相同结果但重复之后?和@MTO我不是很不寻常为什么你加上计数(*)> 1如果加上它有什么区别?