新人SEのメモ帳

oracle、DB2、ExcelVBAとか、たまに将棋

MySQLでランキングを取得する方法

OracleなどにはRank関数という便利なものがあるが、MySQLにはそんなものはない…

 

でもどーしてもSQLでランキングを取得したく、SQLを作成したのでメモ。

 

テストデータとしてこんなデータを用意

 

f:id:engi229:20170225163514p:plain

 

このデータを顧客番号単位で売上金額ベスト3を取得するSQLを作成してみる。

OracleとかOLAP関数を使えるなら…

f:id:engi229:20170225164050p:plain

 

こんな感じで取得できるが、MySQLだと相関サブクエリを使わないと取れないっぽい。

結論から言うとこんな感じになる

 

f:id:engi229:20170225165206p:plain

 

同じ表をN:Nで結合させるとこがポイントで、教えられてなるほどなーと感心してしまった。

 

でも処理速度のこと考えると、あんまりやらないほうがいいな…(データ数にもよるけど)