Project Euler #1 with SQL

遅ればせながらAbout - Project Eulerでもやってみようかと登録。

なるほど。プロフィールの代わりに使用する言語を登録するのか、プログラマはこういうところで自己主張するよな、とか思って見てみると

、、、SQLは?(;´Д`)

ということでSQLで解いてみました。第一問目。

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

標準SQL以外にPostgreSQLの関数を使ってます。

SQLだと集合を集合として扱えるので美しいですね。ループを使っていいのは小学(ry*1

また気が向いた時に続きをSQLで解いていきたいと思います。

SETOF関数

問題を解くだけだと何なので簡単な解説を一つ。

解答の中のgenerate_series関数は、始まりと終わりの数を引数にとって、その「集合」を返す関数です。
このような集合を返す関数はPostgreSQLではSETOF関数と呼ばれています。

詳しくはここらへんを参照。
9.24. 集合を返す関数
SETOF関数のあれこれ - 象と戯れ - postgresqlグループ

generate_seriesを使うと連番の集合を簡単に生成できるので、Project Eulerのような問題向きですね。
なのでProject Eulerの管理者は早くSQLをLanguageから選べるようにするべきです!SQL!SQL!

*1:今時の言語ならmapを使うか