我从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
问题是,即使值列检查不同,我也会计算平均值
答案 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如果加上它有什么区别?