SQL で FizzBuzz (H2 編)
やるまでもないとかつまらないとかって書いたけど,せっかくカテゴリも作ったことなので書いておくテスト.
create table digit (n integer); insert into digit (n) values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); select case when mod(n, 15) = 0 then 'FizzBuzz' when mod(n, 3) = 0 then 'Fizz' when mod(n, 5) = 0 then 'Buzz' else n end from (select a.n * 10 + b.n + 1 n from digit a, digit b) order by n;
やっぱりテーブル作るのがいやーん.
再帰問い合わせがあれば...
「History and Roadmap」によると,大量の Priority 2 に埋もれてるので,当面は無理かなぁ.
やっぱり SQL Server のセットアップを待つか (笑).
P.S.
はぶさんから
subqueryにしたらいいだけだと思うんだけど。
というご指摘が.
でもでも,いい方法が思いつかなかったんだよね.
こんなのならできるんだけど.
select case when mod(n, 15) = 0 then 'FizzBuzz' when mod(n, 3) = 0 then 'Fizz' when mod(n, 5) = 0 then 'Buzz' else n end from (select a.n * 10 + b.n + 1 n from (select 0 n union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) a, (select 0 n union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) b ) order by n;
こんなのだったらテーブル作った方がマシだと思うわけで.
同じような方法でもビューにすれば少しはマシだけど
create view digit (n) as select 0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9; select case when mod(n, 15) = 0 then 'FizzBuzz' when mod(n, 3) = 0 then 'Fizz' when mod(n, 5) = 0 then 'Buzz' else n end from (select a.n * 10 + b.n + 1 n from digit a, digit b) order by n;
ビューを作るんならテーブルでも大差ないっていうか,UNION で並べるくらいならテーブルに INSERT する方がマシだよなぁってことで,やっぱり WITH〜 欲しい.
っていうか,副問い合わせでスマートな方法があるのだろうか?