SQLでProject Euler − Problem 01

再帰SQLを使ってみました。
シーケンスチックな感じで使えてとても良い感じです。
しかも分かりやすい!

■ 新バージョン

/**
1,000 未満の 3 or 5 の倍数になっている数字の合計を求めよ。
**/

WITH Temp (n)
AS
(
	(SELECT 1)
UNION ALL
	SELECT n+1
	FROM Temp
	WHERE n < 1000
)
SELECT SUM(n)
FROM Temp t
WHERE
	t.n % 3 = 0
	OR t.n % 5 = 0
OPTION (MAXRECURSION 0)


■ 旧バージョン

/**
1,000 未満の 3 or 5 の倍数になっている数字の合計を求めよ。
**/

--Temp Table
CREATE TABLE #temp (id int IDENTITY(1,1) NOT NULL)

--Generate
WHILE (SELECT count(*) FROM #temp) < (1000-1)
BEGIN
	INSERT INTO #temp DEFAULT VALUES
END

--Calculation
SELECT sum(id)
FROM #temp
WHERE
	id % 3 = 0
	OR id % 5 = 0

DROP TABLE #temp
    • -