我有一个包含以下值的表格。
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
(我知道这个小组并没有工作。只是为了更好的理解而放在这里)!
答案 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;
我更喜欢第一种方法,因为它更容易概括,比如你想要两个最高值之和。