SQLでやるfizzbuzz

プログラミングの練習でfizzbuzzってありますよね。

もちろん、SQLでもfizzbuzzはできます。一癖、二癖あるSQLの練習にいかがでしょうか?

DB環境:postgresSQL

fizzbuzzの説明は……別にいいですかね?もし分からなければ、他の人の説明とか探してみてください。

それでは、私のfizzbuzzの解答と、その説明をしていきます。

 

ちゃんとテーブルを作るのは面倒なので、CTE式(with共通式)で元データを作ります。

  1. seq:1〜100までの連番テーブル
  2. fizzbuzz:どの倍数のときに、どの文字列を出力するかのfizzbuzzテーブル

3の倍数はfizz、5の倍数はbuzz、両方の倍数であればfizzbuzzを出力します。

それ以外は連番をそのまま表示ですね。(*´ω`*)

では、実際に抽出クエリに移ります。

fromとwhere句から説明していきましょうか。

fizzbuzzの場合、欲しいレコード数は連番の数と同じ数だけ欲しいですよね。

そのため、fromで指定するテーブルはseqのみを指定していきます。また同数なのでwhere句は無しです。

今回は、string_aggの集約関数を使いたいので、group by句をつけます。

group by句 に指定する内容である集約単位を考えていきます。今回は、seqの中で集約したいのでseqを指定していきます。

出力したい内容は、seq……あと、fizzbuzzを出力するfizzbuzz列にでもしましょうか。

fizzbuzzのstring_aggの中では、以下の処理をしています。

  1. numの倍数かどうかを判定
  2. numを早い順に並べています。

そのため、ドンドン連番テーブルやfizzbuzzのどの倍数かの判定が増えても問題ないクエリとなっています。

 

コメント

タイトルとURLをコピーしました