Sql Oracle按功能分组
我有一个具有以下值的表 read_count users manager ---------------------------------- 16 Ann Jake 12 Ann Jake 19 Tom MartinSql Oracle按功能分组,sql,oracle,Sql,Oracle,我有一个具有以下值的表 read_count users manager ---------------------------------- 16 Ann Jake 12 Ann Jake 19 Tom Martin (我知道这个小组不起作用。只是为了更好的理解才给这里的) 这里有一种方法。使用row\u number()按read\u count降序枚举每个用户/管理员
(我知道这个小组不起作用。只是为了更好的理解才给这里的) 这里有一种方法。使用
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;
我更喜欢第一种方法,因为它更容易推广,比如说,如果你想要两个最高值的总和