だらだらやるよ。

こげつのIT技術メモ

項目の総積を求める。

再帰させて総積を求めてるけど、もちょっと簡単にできるよ!
再帰 CTE で総積を求める (再帰 CTE の入門) - ぐるぐる~


再帰的な処理って文字列を連結させて出力するときとかに作ったりした記憶があるけど、
項目の総積を求めるくらいであれば関数の組み合わせだけで書けるので。


えっと僕数学とか良くわからないんだけど、SQLHacksに載ってたので。
たとえばa,b,c3値の掛け算は以下のように変換できるらしい。

a*b*c=exp(log(a)+log(b)+log(c))

というわけで、target_columnの総積を求めるSQLを書くとこんな感じやね
logの関数はDBMSによって違うけどlnかlogかな。

exp(sum(ln(target_column)))

実行できるコードは以下。PostgreSQL8.3で確認

SELECT
    exp(sum(ln(n)))
FROM
    (
    SELECT 1 AS n
    UNION ALL SELECT 2
    UNION ALL SELECT 3
    UNION ALL SELECT 4
    UNION ALL SELECT 5
    ) as nums

とまぁこんな感じで:-)


ちなみに、オラクルの10gとかだと独自定義の集計関数作れるらしいのでそれでつくっちゃうのもいいかも。
SQLServerの2000かなんか触ったときは独自定義の集計関数作れなかったんだよなーとか思いつつ。


あ、ちなみにこの総積を求めるのはSQLHacksに載ってました。
個人的にはちょこちょこと役に立つ情報が載ってたりー
再起WITHの話も載ってたような気が。