2015-02-07 2 views
5

SQL 쿼리를 수행했지만 루프를 사용하는 프로 시저를 작성하지 않았으므로 여기서 손실되었습니다. Oracle SQL Developer를 사용하고 있습니다. 나는 선수들에게 연주 모든 게임의 총 점수를이 테이블을 통해 내가 루프를 잡아 수 할 수 있도록하는 방법Oracle PL/SQL의 테이블을 반복합니다.

Person_ID Score Name Game_ID 
1   10 jack 1 
1   20 jack 2 
2   15 carl 1 
2   3  carl 3 
4   17 steve 1 

: SQL 또는 PL/SQL

수행 할 수 있습니다 나는이 유사한 테이블이있다. 결과는 다음과 같을 것입니다 :

Person_ID Score Name 
1   30 jack 
2   18 carl 
4   17 steve 

또한 무엇을하고 싶은가요?


편집 : 분명히 존재하지만 난 그것없이 할 수 있지만 루프와 함께이 작업을 수행 할 필요가 없어 죄송합니다. 주어진 GAME_ID에 대한 게시물을 판 후

+1

무슨 뜻 이죠을, "SQL 또는 PL/SQL에서 수행 할 수 있습니까?" SQL은 루프에 대한 개념이 없으며, set-based 언어입니다. –

답변

11

솔루션

이 절차의 목록을 기록했다. 당신이 매개 변수를 생략하면 모든 게임이 요약됩니다

create or replace procedure player_scores(i_game_id number default null) as 
begin 
    for o in (select person_id, name, sum(score) score 
     from games where game_id = nvl(i_game_id, game_id) 
     group by person_id, name) 
    loop 
    dbms_output.put_line(o.person_id||' '||o.name||' '||o.score); 
    end loop; 
end player_scores; 

이전 솔루션 :

당신은 그것을 위해 단순한 질의 절차가 필요하지 않습니다 :

select person_id, name, sum(score) 
    from your_table 
    where game_id in (1, 2) 
    group by person_id, name 
+0

응답 주셔서 감사하지만 실제로 루프가있는 프로 시저 일 필요가 있습니다 – AmericanSuave

+0

완료. 나는 당신의 데이터를 게임과 플레이어의 두 테이블로 나눌 것이다. 그러나 그것은 당신에게 달려있다. –

관련 문제