これまでのところ、次のクエリがあります。これは、内部スコアに基づいて本をランク付けするのに完全に機能します。
UPDATE CER
SET CER.book_rank = Ranker.ranc
FROM book_ranks CER
INNER JOIN
(SELECT Rank() over (Order by book_score desc, book_id) as ranc, book_id
FROM book_ranks
WHERE Category = 'Fiction'
GROUP BY book_id, book_score
) Ranker
ON
CER.book_id = Ranker.book_id
コードは完璧に機能していますが、大文字と小文字を区別していません。
入力:
bookName book_score
-------- ----------
book2 45
book3 35
book5 35
book7 35
book9 30
現在の出力:
bookName book_score book_rank
-------- ---------- ---------
book2 45 1
book3 35 2
book5 35 3
book7 35 4
book9 30 5
必要な出力:
bookName book_score book_rank
-------- ---------- ---------
book2 45 1
book3 35 2
book5 35 2
book7 35 2
book9 30 5
book3、book5、book7 は同じスコアであるため、それらのランクは同じで、book9 はランク 5 である必要があります。