プログラミングの練習でfizzbuzzってありますよね。
もちろん、SQLでもfizzbuzzはできます。一癖、二癖あるSQLの練習にいかがでしょうか?
DB環境:postgresSQL
fizzbuzzの説明は……別にいいですかね?もし分からなければ、他の人の説明とか探してみてください。
それでは、私のfizzbuzzの解答と、その説明をしていきます。
ちゃんとテーブルを作るのは面倒なので、CTE式(with共通式)で元データを作ります。
- seq:1〜100までの連番テーブル
- 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の中では、以下の処理をしています。
- numの倍数かどうかを判定
- numを早い順に並べています。
そのため、ドンドン連番テーブルやfizzbuzzのどの倍数かの判定が増えても問題ないクエリとなっています。
コメント