ユーザーデータを集計して、ランキングを取りたかった時のお話し。

userテーブルのcountカラムを集計して、rankテーブルにデータを登録(UPDATE)するsqlです。

---- 上のデータをrankテーブルにアップデート
UPDATE ( 
db.rank r
left join(
	SELECT r1.uid, r1.count, COUNT( r2.uid ) +1 as rank
	FROM (SELECT uid, count FROM user) AS r1
	LEFT JOIN 
	 (SELECT uid, count FROM user) AS r2
	 ON r1.count < r2.count
	GROUP BY r1.uid
	) b
	 on  r.uid = b.uid 
)
SET r.battle = b.rank;

こういうsql作ってると、Mysqlって不便な事がまだまだありますね。
oracleならもーちっと楽ちんだった気が、、、
たしか、「rank() over(order by count)」で順位付けできたです。

あと、UPDATE文の構造も話をややこしくしていると思う。
http://dev.mysql.com/doc/refman/4.1/ja/update.html
この構造は僕の頭には負荷が高すぎるorz


続き、、、以外と簡単に解決したお話し。