SQLで順位を付ける方法
次のようなテーブル「member」があったとします。
id | name | height |
---|---|---|
1 | Ochiai | 179 |
2 | Tanaka | 172 |
3 | Sato | 177 |
4 | Suzuki | 176 |
5 | Inoue | 175 |
6 | Ueno | 179 |
7 | Endo | 178 |
8 | Ito | 180 |
9 | Yamamoto | 175 |
10 | Aoki | 170 |
これに身長(height)の高い順に順位を付けます。Access2007で確認しました。
SQLは次の通りです。
SELECT (
SELECT Count(member.id)
FROM member
WHERE member.height > member1.height
) + 1 AS rank, member.name, member.height
FROM member , member AS member1
WHERE member.id = member1.id
ORDER BY member.height DESC;
SELECT Count(member.id)
FROM member
WHERE member.height > member1.height
) + 1 AS rank, member.name, member.height
FROM member , member AS member1
WHERE member.id = member1.id
ORDER BY member.height DESC;
「member AS member1」として同じテーブル「member1」を作ります。
「SELECT Count(member.id) FROM member WHERE member.height > member1.height」として、自分より身長の高い者の数を数えています。これに1を加えることで順位になります。自分より身長の高い者がいない場合は0で、これに1を加えて「1」、一人いる場合は1で、これに1を加えて「2」となります。
結果は次の通りです。
rank | name | height |
---|---|---|
1 | Ito | 180 |
2 | Ueno | 179 |
2 | Ochiai | 179 |
4 | Endo | 178 |
5 | Sato | 177 |
6 | Suzuki | 176 |
7 | Yamamoto | 175 |
7 | Inoue | 175 |
9 | Tanaka | 172 |
10 | Aoki | 170 |
同じ身長の場合、同じ順位になっています。
[ 2012年7月28日 | カテゴリー: Access | タグ: SQL , tips ]
« ロンドン五輪サッカー競技場 | 複数行にマッチさせる正規表現 »
コメントを残す