次のようなテーブル「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 |
同じ身長の場合、同じ順位になっています。


コメント