2017.12.13 Wednesday
Firebird CTEでFizzBuzz
Firebird CTEでFizzBuzz
本エントリはFirebird Advent Calendar 2017の13日目です。
DEKOさんが以下のエントリを書いていたので、それのCTE(Common Table Expression)版を作ってみました。
Firebird SQL のストアドプロシージャで FizzBuzz(FizzBuzz Advent Calendar 2017)
WITH RECURSIVE my_cte AS
(
SELECT 1 AS i from rdb$database
UNION ALL
SELECT 1+i FROM my_cte WHERE i<20
)
SELECT CASE
WHEN (mod(i,3)=0) AND (mod(i,5)=0) THEN 'Fizz Buzz'
WHEN mod(i,3)=0 THEN 'Fizz'
WHEN mod(i,5)=0 THEN 'Buzz'
ELSE i END
FROM my_cte;
実行するとこんな感じ。
CASE
==========
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
Buzz
CTEの再帰クエリで連番を生成し、それを検索CASE式で分岐しています。
連番の生成の説明は以下をご覧ください。
MySQL 8.0 Lab版: MySQLの (再帰)共通テーブル式(CTE)(Yakst)
検索CASE式については以下をご覧ください。
CASE式のススメ(リレーショナル・データベースの世界)
本エントリはFirebird Advent Calendar 2017の13日目です。
DEKOさんが以下のエントリを書いていたので、それのCTE(Common Table Expression)版を作ってみました。
Firebird SQL のストアドプロシージャで FizzBuzz(FizzBuzz Advent Calendar 2017)
WITH RECURSIVE my_cte AS
(
SELECT 1 AS i from rdb$database
UNION ALL
SELECT 1+i FROM my_cte WHERE i<20
)
SELECT CASE
WHEN (mod(i,3)=0) AND (mod(i,5)=0) THEN 'Fizz Buzz'
WHEN mod(i,3)=0 THEN 'Fizz'
WHEN mod(i,5)=0 THEN 'Buzz'
ELSE i END
FROM my_cte;
実行するとこんな感じ。
CASE
==========
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz
19
Buzz
CTEの再帰クエリで連番を生成し、それを検索CASE式で分岐しています。
連番の生成の説明は以下をご覧ください。
MySQL 8.0 Lab版: MySQLの (再帰)共通テーブル式(CTE)(Yakst)
検索CASE式については以下をご覧ください。
CASE式のススメ(リレーショナル・データベースの世界)
JUGEMテーマ:コンピュータ