2010-12-21 148 views
5

我有一段SQL可以在排行榜上排除高尔夫球员的排名。我对Spring很新,我不认为我可以使用Spring JDBC执行此操作,所以我认为我需要将它转换为mySQL存储过程。将SQL语句转换为mySQL存储过程

任何人都可以给我一些指针,我需要转换什么?简单地把CREATE PROCEDURE和参数列表放在这里不起作用。

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 
+1

你应该接受一个答案,保罗。这个想法是在这里标记正确和最有帮助的答案。 – 2010-12-27 10:29:28

回答

1

,这将让你开始:

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); 
0

感谢您的线索。我解决了它。粗略地说这是

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

你不想让高尔夫球员ID作为参数传球? – 2010-12-23 20:34:02

1

你的工作是好的 - F00曾以为你想只叫出每个球手排名直通给定参数:param - 因此结构...

create procedure get_golfer_rank 
(
p_golferID int unsigned 
) 

和..

where golferID = p_golferID; 

限制为单个高尔夫球手。