Skip to content

Instantly share code, notes, and snippets.

@safferli
Created July 16, 2015 13:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save safferli/d50b1b614de08368f19f to your computer and use it in GitHub Desktop.
Save safferli/d50b1b614de08368f19f to your computer and use it in GitHub Desktop.
Efficiently rank in SQL. Rank 1 indexes all values, Rank 2 indexes over users, Rank 3 indexes over heroes (inside user)
SELECT df.*, @curRank := @curRank + 1 AS rank,
@prev := @curr,
@curr := user_id,
@rank2 := IF(@prev = @curr, @rank2, @rank2+1) AS rank2,
@rank3 := IF(@prev = @curr, @rank3+1, 1) AS rank3
FROM (
SELECT user_id, itemType,
extractvalue(data, '//heroId') as hero_id, time
FROM fct_generate_hero
ORDER BY user_id, time
) as df, (SELECT @curRank := 0) r, (SELECT @curr := null, @prev := null, @rank2 := 0, @rank3 := 0) r2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment