yogi46
yogi46

Reputation: 53

How to add rank, based on points in mysql

I am struggle with mysql query. please help me. This is my query, i getting correct result but i need to modify the result in mysql.

                SELECT  bu.username,
                    bg.id as goal_id,
                    br.id as reason_id,
                    (SELECT COUNT(test_reason_id) FROM test_rank WHERE test_reason_id = br.id) as point
                FROM
                    test_goal AS bg INNER JOIN test_reason AS br ON 
                    br.user_id=bg.user_id INNER JOIN test_user AS bu ON
                    br.user_id=bu.id
                WHERE
                    bg.id       =   br.test_goal_id
                GROUP BY
                    bg.id
                ORDER BY
                    point DESC

Tabble-1 My actual table look like this when i use ORDER BY point DESC then its look like Table-2

username     goal_id    reason_id   point
 khan           8            3        2
 john           6            9        5
 yoyo           5           21        4
 smith         11            6        5

Tabble-2 My result set look like this

username     goal_id    reason_id   point
 john           6            9        5
 smith         11            6        5
 yoyo           5           21        4
 khan           8            3        2

But i want my result set like this

username     goal_id    reason_id   point   rank
 john           6            9        5       1
 smith         11            6        5       2
 yoyo           5           21        4       3
 khan           8            3        2       4

is this possible? please can any one help me. it too difficult for me.

Upvotes: 0

Views: 132

Answers (1)

juergen d
juergen d

Reputation: 204894

Add a row count variable like this:

select a.*,  (@row := @row + 1) as rank
from (
      SELECT  bu.username,
                bg.id as goal_id,
                br.id as reason_id,
                (SELECT COUNT(test_reason_id) FROM test_rank WHERE test_reason_id = br.id) as point                   
            FROM
                test_goal AS bg INNER JOIN test_reason AS br ON 
                br.user_id=bg.user_id INNER JOIN test_user AS bu ON
                br.user_id=bu.id                    
            WHERE
                bg.id       =   br.test_goal_id
            GROUP BY
                bg.id
            ORDER BY
                point DESC
) a, (SELECT @row := 0) r

See this simplified SQLFiddle example

Upvotes: 3

Related Questions