今回は小ネタエントリです。
■FizzBuzzとは
詳細はWikipediaを参照してください。 要は、1から100まで表示して、3で割り切れる時にFizz、5で割り切れる時にBuzz、3でも5でも割り切れる時にFizzBuzzと表示する、というプログラムを書くことです。
■1から100まで数字を表示する
まず、PostgreSQLで1から100までの数字を表示してみます。
PostgreSQLで連番を表示するには、generate_series()関数を使います。
snaga=> select * from generate_series(1,100); generate_series ----------------- 1 2 3 4 5 6 7 (snip) 95 96 97 98 99 100 (100 rows) snaga=>
■3で割り切れる値の時にFizzと表示する
次に、3で割り切れる数字の時にFizzと表示してみます。そのためには、CASE WHEN構文を使います。
snaga=> select snaga-> case when generate_series % 3 = 0 then 'Fizz' snaga-> else generate_series::text end snaga-> from generate_series(1,100); generate_series ----------------- 1 2 Fizz 4 5 Fizz 7 8 Fizz 10 (snip) Fizz 97 98 Fizz 100 (100 rows) snaga=>
■5で割り切れる値の時にBuzzと表示する
次に、5で割り切れる数字の時にBuzzと表示します。snaga=> select case when generate_series % 3 = 0 then 'Fizz' when generate_series % 5 = 0 then 'Buzz' else generate_series::text end from generate_series(1,100); generate_series ----------------- 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz (snip) Fizz 97 98 Fizz Buzz (100 rows) snaga=>
■3でも5でも割り切れる値の時にFizzBuzzと表示する
最後に、3でも5でも割り切れる値の時に、FizzBuzzと表示してみます。
優先度としてもっとも高いので、CASE文の最初の条件分岐に持ってきます。
snaga=> select snaga-> case when generate_series % 3 = 0 and generate_series % 5 = 0 then 'FizzBuzz' snaga-> when generate_series % 3 = 0 then 'Fizz' snaga-> when generate_series % 5 = 0 then 'Buzz' snaga-> else generate_series::text end snaga-> from generate_series(1,100); generate_series ----------------- 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz (snip) FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz (100 rows) snaga=>
■まとめ
というわけで、PostgreSQLであっても、世間で言われているFizzBuzzを実現することができることをお伝えしました。
ぜひ、面談などで「FizzBuzz書ける?」と質問された場合には、「それ、PostgreSQLでも書けますよ!」とアピールしていただければと思います。
では。
0 件のコメント:
コメントを投稿