- 总是初始化用户变量,它们默认否则为NULL。
SET @prevID:[email protected]:=0;
UPDATE teamrank t -- one row per team?
JOIN members m USING (teamID) -- multiple rows per team?
SET rank =
IF(@prevID != m.teamID, /* Capture when a teamIDs changes */
(@runSum := m.rank) + ((@prevID := m.teamID)*0), /* reset both @runSum and @prevTeam */
(@runSum := @runSum + m.rank) /* increment running sum */
)
-- It is important to have proper sequencing, so to reset @runSum when a teamID changes.
ORDER BY t.teamID
;
我做出了一个假设,即执行团队排名所需的逻辑是团队内个人的排名总和。
同样的技术允许执行任何类型的运行总和或计数器,当“组”更改时需要重置。
- J Jorgenson -
对不起。我最终在“IF”中重置了它。你说得对,'ORDER'对于这个工作很重要。 – 2010-11-04 02:47:58