Oracle按功能分组

时间:2014-04-14 15:15:53

标签: sql oracle

我有一个包含以下值的表格。

read_count    users      manager
----------------------------------
16            Ann        Jake
12            Ann        Jake
19            Tom        Martin

我正在尝试根据管理器对值进行分组,并获取每个用户的最大read_count总和。

类似

select manager,sum(max(read_count)) from table group by manager

(我知道这个小组并没有工作。只是为了更好的理解而放在这里)!

1 个答案:

答案 0 :(得分:3)

这是一种方法。使用row_number()read_count降序枚举每个用户/经理组合的行。然后,使用条件求和只获得每个用户的一个值:

select manager,
       sum(case when seqnum = 1 then read_count end) as SumMaxReadCountPerUser
from (select t.*,
             row_number() over (partition by manager, users order by read_count desc
                               ) as seqnum
      from table t
     ) t
group by manager;

您也可以使用嵌套的group by语句执行此操作:

select manager, sum(max_read_count)
from (select manager, users, max(read_count) as max_read_count
      from table t
      group by manager, users
     ) mu
group by manager;

我更喜欢第一种方法,因为它更容易概括,比如你想要两个最高值之和。