0

だから私はこのようなテーブルにデータを持っています:

id        total   group_id
1897      738      1
2489      716      2
2325      715      3
1788      702      2
1707      699      3
2400      688      3
2668      682      2
1373      666      1
1494      666      1
1564      660      1
2699      659      1
1307      648      4
1720      645      4
2176      644      1
1454      644      4
2385      639      3
1001      634      2
2099      634      4
1006      632      1
2587      630      3
1955      624      3
1827      624      4
2505      623      4
2062      621      3
1003      618      1
2286      615      4
2722      609      4

合計に基づいてグループごとの ID をランク付けし、同点の場合に同じランクを与えるにはどうすればよいですか?

以下でこの解決策を試しましたが、関係を処理しません。

SELECT g1.admission_no
 , g1.total
 , g1.stream_id
 , COUNT(*) AS rn
 FROM ranktest   AS g1
   JOIN ranktest   AS g2
   ON (g2.total, g2.admission_no) >= (g1.total, g1.admission_no)
   AND g1.stream_id = g2.stream_id
   GROUP BY g1.admission_no
    , g1.stream_id
    , g1.total
   ORDER BY g1.stream_id
    , total ;

期待される

id        total   group_id rank
1897      738      1        1
2489      716      2        1
2325      715      3        1
1788      702      2        2 
1707      699      3        2
2400      688      3        3
2668      682      2        3
1373      666      1        2
1494      666      1        2
1564      660      1        3
2699      659      1        4
1307      648      4        1
1720      645      4        2
2176      644      1        4
1454      644      4        3
2385      639      3        4
1001      634      2        4
2099      634      4        4
1006      632      1        5
2587      630      3        5
1955      624      3        6
1827      624      4        5
2505      623      4        6
2062      621      3        6
1003      618      1        6
2286      615      4        7 
2722      609      4        8 
4

3 に答える 3