SQLでちゃんとしたランキングを作る【2/3】
実に7ヶ月ぶりにこのシリーズを再開することにした。
前回なにをやったのか、というと、率直にリンク先を見ていただければ良いと思う。
「
SQLでちゃんとしたランキングを作る【1/3】」
つまりseletしてorderしてlimitするだけでは正しいランキングがでない、ということだ。
幸いにも識者の方から色々アドバイスをもらい、俺なりに試してみた結果を書いてみようと思う。
まず、識者、つまり
Dupont氏から引用してもらったSQLがこれだ。
- select (select count(distinct b.sal) from emp b where b.sal <= a.sal) as rnk, a.sal from emp a
select (select count(distinct b.sal) from emp b where b.sal <= a.sal) as rnk, a.sal from emp a
個人的にSQLは改行を入れて見やすくする主義なので、以下のように適宜変更してみる。
- select
- (
- select
- count(distinct b.sal)
- from
- emp b
- where
- b.sal <= a.sal
- ) as rnk, a.sal
- from
- emp a
select
(
select
count(distinct b.sal)
from
emp b
where
b.sal <= a.sal
) as rnk, a.sal
from
emp a
コードというものは、改行やインデントで適切にフォーマットしておくべきだと思っている。
しかしSQLに関してはまだ拘りはないので、だいたいいつもフォーマットは違う。統一しておいたほうが良い場合と、統一しないでも良い場合があるのだが、SQLは俺にとってまだ後者の方だ。