2014-04-14 2 views
0

다음 값을 가진 테이블이 있습니다.기능별 오라클 그룹

 
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 

(I이 작동하지 않습니다에 의해이 그룹. 그냥 이해 여기를 준 알)

처럼!

답변

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; 

내가 말, 첫 번째 방법을 선호 두 개의 가장 높은 값의 합이 필요한 경우.