使用where或having子句计算平均值

时间:2015-03-22 19:56:46

标签: sql oracle oracle11g

我有一张表T1看起来像:

acctid  time transactid  amnt
 233    xxx    2         400

我想用amnt>返回所有交易表中的平均值(amnt)。这是我的代码:

select * from (select transactid,amnt,avg(amnt) 
over (partition by transactid) avgamnt from T1) where amnt>avg(mnt)
over (partition by transactid)

但是,我在想另一个使用having子句

select * from (select transactid,amnt,avg(amnt) 
    over (partition by transactid) avgamnt from T1) having amnt>avg(mnt)
    over (partition by transactid)

请问哪一个更好(或更正)以及为什么请?

2 个答案:

答案 0 :(得分:1)

您的查询几乎就在那里:

select *
from (select transactid, amnt,
             avg(amnt) over (partition by transactid) as avgamnt 
      from T1
     ) t
where amnt > avgamnt;

您可以在子查询中定义列。然后,你只需要使用它。

答案 1 :(得分:0)

  

我想用amnt>返回所有交易平均值(amnt)in   桌子。

所以为什么不用这个:

select * from T1 where T1.amnt > (select avg(t.amnt) from T1 t)
相关问题