DB(MySQL)でランキング順に並べる方法と注意点
はじめに
DBを勉強しておりアウトプットとして記事を書きます !
間違った表現をしてたら、ご指摘して頂けると嬉しいです。
ランキング順に並べる方法
- RANK関数などを使わずに順位を取得する方法として、順位をつけるデータを一旦順位をつける順番(昇順または降順)にすべて取得して、それをFetchなどの方法で番号をつけていくという方法もありますが、ここではSQLのSELECTステートメントのみで取得する方法で実装する。
-
NG例
DBに「rank」というようなカラムを追加しそこに直接、現在のランキングを挿入し
select * from (ソートするテーブル名) order by rank;
のようなSQLでソートする。
この場合の問題点はランキングが変動したときに再度、直接rankカラムにランキングを挿入する手間がかかる。
現時点でのランキングを参照するだけの場合であれば問題ないかもしれないが、ランキングは常に更新され、いつ見ても最新のランキングを参照できるほうが良い。
-
GOOD例
ランキングを相対的ではなく絶対的に管理する。
「rank」ではなく「sales」のような絶対数を入れるカラムにする。
その「sales」の絶対数をソートする。
select * from (ソートするテーブル名) order by sales desc;
このように絶対的な情報でソートすると、ランキングに変動があっても対応できる。