Convert SQL statement to mySQL stored procedure

I have a piece of SQL that develops a golfer rank in the leaderboard. I'm new to Spring, and I don't think I can accomplish this using Spring JDBC, so I need to convert it to mySQL stored procedure.

Can someone give me some guidance on what I need to convert? Just setting CREATE PROCEDURE and the parameter list around it does not work.

SET @rank = 1, @prev_val = NULL, @prev_rank = NULL;
SELECT rank FROM
(
 SELECT @rank := IF(@prev_val!=winnings,@prev_rank+1,@rank) AS rank
     , @prev_val := winnings AS winnings
     , @prev_rank := @rank AS prevRank
     , t.golferID
  FROM 
     (
        select g.golferID, sum(winnings) as winnings 
        from results r
        join resultDetails rd on r.resultID = rd.resultID
        join golfers g on rd.golferID = g.golferID
        where r.status = 'C' and r.compID = 1 
        group by golferID order by winnings desc
     ) AS t
) AS showRank WHERE golferID = 16
+5
source share
3 answers

this will help you get started:

drop procedure if exists get_golfer_rank;

delimiter #

create procedure get_golfer_rank
(
p_golferID int unsigned
)
proc_main:begin

set @rank = 0;

select 
...
where golferID = p_golferID;

end proc_main #

delimiter ;


call get_golfer_rank(18);
+1
source

- f00 , - , ...

create procedure get_golfer_rank
(
p_golferID int unsigned
)

...

where golferID = p_golferID;

.

+1

Thanks for the conclusions. I did it. Roughly speaking, this

drop procedure if exists getRank;

delimiter $$

create procedure getRank()
begin

    set @rank = 1; 
    set @prev_val = NULL;
    set @prev_rank = NULL;

    select rank from
    (
     select @rank := if(@prev_val!=winnings,@prev_rank+1,@rank) as rank
         , @prev_val := winnings as winnings
         , @prev_rank := @rank as prevrank
         , t.golferid
      from 
         (
            select g.golferid, sum(winnings) as winnings 
            from results r
            join resultdetails rd on r.resultid = rd.resultid
            join golfers g on rd.golferid = g.golferid
            where r.status = 'c' and r.compid = 1 
            group by golferid order by winnings desc
         ) as t
    ) as showrank where golferid = 16;

end; $$

delimiter ;
0
source