与Oracle中另一列相关的列的平均值

时间:2012-11-12 05:06:27

标签: sql database oracle average

好的,所以我有一个包含三列的数据库:id,username和rating。

数据库看起来像这样:

 ------------ ------------ ------------ 
|     ID     |     NAME   |   RATING   |
 ------------ ------------ ------------
|     1      |   bc112    |      3     |
 ------------ ------------ ------------
|     2      |   cd111    |      1     |
 ------------ ------------ ------------
|     2      |   cd111    |      2     |
 ------------ ------------ ------------
|     2      |   cd111    |      6     |
 ------------ ------------ ------------

所以基本上我陷入困境的是如何获得每个特定用户的平均评分?

我试过了:

SELECT ID, RATING
FROM THING
WHERE AVG(RATING) FOR ID < 3;

但结果却没有告诉我什么。代码有什么问题?

2 个答案:

答案 0 :(得分:1)

使用AVG聚合函数,group by子句和having子句如下:

SQL> with t1 (ID, NAME, RATING) as
  2  (
  3    select 1, 'bc112', 3  from dual union all
  4    select 2, 'cd111', 1  from dual union all
  5    select 2, 'cd111', 2  from dual union all
  6    select 2, 'cd111', 6  from dual
  7  )
  8  select ID
  9       , NAME
 10       , avg(rating)
 11    from t1
 12   group by id, name
 13   having avg(rating) > 2 
 14  ;

        ID NAME  AVG(RATING)
---------- ----- -----------
         1 bc112           3
         2 cd111           3

答案 1 :(得分:0)

SELECT ID,AVG(RATING) 从那里 GROUP BY id

如果您想要平均评级的任何条件,您可以为每个ID提供平均评级。