「例外をスローする」
そんなことを偉そうに語ってきたけれども、にわかにスローについて何も知らない自分がいることに気付き、愕然とした。一体それは、オーバースローなのか、サイドスローなのか、はたまたアンダースローなのか。
個人的にはサイドスローっぽいイメージです。本当にどうでもいい。
「例外をスローする」
そんなことを偉そうに語ってきたけれども、にわかにスローについて何も知らない自分がいることに気付き、愕然とした。一体それは、オーバースローなのか、サイドスローなのか、はたまたアンダースローなのか。
個人的にはサイドスローっぽいイメージです。本当にどうでもいい。
SQLでテーブルのデータに順位付けするのって、どうやるんだろう。ということで、ちょっとばかし考えてみた。
例として、次のような商品テーブルがあって、その価格が高い方から順に、1位、2位…と順位付けするケースを考えてみる。サンプルに深い意味はないです。
id | name | price |
---|---|---|
1 | FOMA F702iD | 19200 |
2 | FOMA F902i | 24800 |
3 | FOMA N701i | 12350 |
4 | FOMA P901iS | 22560 |
5 | FOMA P901iTV | 32400 |
6 | FOMA SH702iD | 19740 |
7 | FOMA SH901iS | 17690 |
8 | FOMA SH902iS | 31220 |
9 | FOMA SO702i | 16600 |
10 | FOMA SIMPURE N | 3680 |
11 | FOMA N902i | 24100 |
順位付けには、次のようなSQLを考えてみた。
SELECT COALESCE(rank, 1) AS rank, name, price FROM product LEFT OUTER JOIN ( SELECT (count(*) + 1) AS rank, p1.id FROM product AS p1 CROSS JOIN product AS p2 WHERE p2.price>p1.price GROUP BY p1.id ) AS rank_table USING (id) ORDER BY rank
もし価格が同じ商品があった場合は、順位タイということで、同じ順番が振られる。なので、ユニークな順位が求められるケースでは、ちょいと工夫が必要です。
できるにはできたんだけど、使うことは無さそうだなあ。相当数あるときは、CROSS JOIN でパフォーマンスが落ちそうだし、JavaなりPHPなり別言語でやった方がラクチンだし。もっと効率の良い方法があれば、嬉しいんだけど。
カレントディレクトリへのパスではなくて、その名前だけを取得する方法が思い出せぬ。
文字列操作で強引に攻めても良いんだけど、きっとスマートな方法があるはず。そう思い始めてから1時間あまり。2年前の自分メモを見つけて、ようやく思い出した。そうそう、これこれ。
${PWD##*/}
これで、カレントディレクトリのパスについて、その先頭から「*/」パターンの最長マッチ部分が取り除かれ、無事ディレクトリ名だけを取得できる。おー、すげー、暗号かコレは。