2011-09-25 2 views
0

문제 : 공급 업체의 최상위 클라이언트를 찾아야합니다. 상위 고객은 모든 주문에서 최대 항목 합계를가집니다. 공급 업체에 2 명의 최고 고객이있는 경우 최고 고객은 최소 주문 ID를 갖게됩니다. 이는 주문을 처음 작성한 사람과 최대 품목을 얻은 사람이 맨 위에 표시된다는 것을 의미합니다.오라클의 한 열에 중복되지 않은 여러 열을 선택하는 방법

select s.s_id, c.c_id, min(o.o_id), count(*) 
from suppliers s, clients c, orders o, items i 
where s.s_id=c.id_s and c.c_id=o.id_c and o.o_id=i.id_o 
group by s.s_id, c.c_id 
order by 4 desc, 3 

를하고이 결과를 얻을 : 나는이 SQL 코드를 작성했다 http://imageshack.us/photo/my-images/148/32969388.jpg/

을하지만 난 얻을 필요가 : http://imageshack.us/photo/my-images/842/51815927.jpg/

답변

1

당신은 순서가 계산 및 ID 순위를해야합니다. 따라서 분석 및 인라인보기를 사용해야합니다. 같은 뭔가 :

select s_id 
     , c_id 
     , min_order_id 
     , no_of_orders 
from (
    select s_id 
      , c_id 
      , min_order_id 
      , no_of_orders 
      , rank() over (partition by s_id 
          order by no_of_orders DESC, min_order_id ASC) rnk 
    from (
     select s.s_id 
       , c.c_id 
       , min(o.o_id) as min_order_id 
       , count(*) as no_of_orders 
     from suppliers s, clients c, orders o, items i 
     where s.s_id=c.id_s and c.c_id=o.id_c and o.o_id=i.id_o 
     group by s.s_id, c.c_id 
     ) 
    )  
where rnk=1 
/
+0

죄송 SQL 코드는이를 얻을 : http://imageshack.us/photo/my-images/98/23702547.jpg/ 도움을 주셔서 감사합니다. – user963601

+0

모든 행의 순위 = 1 – user963601

+0

순위는 공급 업체 파티션 당만 표시됩니다 (고객의 파티션이 아닌 클라이언트). APC의 쿼리를 편집했습니다. –

관련 문제