Sql Oracle按功能分组

Sql Oracle按功能分组,sql,oracle,Sql,Oracle,我有一个具有以下值的表 read_count users manager ---------------------------------- 16 Ann Jake 12 Ann Jake 19 Tom Martin (我知道这个小组不起作用。只是为了更好的理解才给这里的) 这里有一种方法。使用row\u number()按read\u count降序枚举每个用户/管理员

我有一个具有以下值的表

read_count users manager ---------------------------------- 16 Ann Jake 12 Ann Jake 19 Tom Martin
(我知道这个小组不起作用。只是为了更好的理解才给这里的)

这里有一种方法。使用
row\u number()
read\u 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;

我更喜欢第一种方法,因为它更容易推广,比如说,如果你想要两个最高值的总和。

这里有一种方法。使用
row\u number()
read\u 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;

我更喜欢第一种方法,因为它更容易推广,比如说,如果你想要两个最高值的总和。

这里有一种方法。使用
row\u number()
read\u 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;

我更喜欢第一种方法,因为它更容易推广,比如说,如果你想要两个最高值的总和。

这里有一种方法。使用
row\u number()
read\u 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;
我更喜欢第一种方法,因为它更容易推广,比如说,如果你想要两个最高值的总和